0. 前言
- 在学习《Learning OpenCV 3》过程中的一些记录。
1. 展示窗口
1.1. 流水账
cv::namedWindow("Example1", cv::WINDOW_AUTOSIZE)
- 构建窗口。
- 第一个参数是框的名称,第二个用于尺寸参数。
cv::imshow("Example1", img)
- 在窗口中展示图片。
- 第一个参数用于选择定义过的
cv::namedWindow
,第二个参数是图像对象,即cv::Mat
对象。
cv::waitKey(0)
- 停留在当前画面的时间。
- 如果是0,则无限停留;如果是数字,则停留对应的毫秒。
- 返回值是按下按钮的ASCII码。
cv::destroyWindow("Example1")
- 关闭窗口。
- 参数是窗口名称。
1.2. 应用
- 创建窗口,显示图片,按键结束,销毁窗口。
1
2
3
4namedWindow("Example", cv::WINDOW_AUTOSIZE);
imshow("Example", img);
waitKey(0);
destroyWindow("Example2-2");
2. 图像 & 视频
2.1. 基本对象
cv::Mat
- 用于保存图片。
cv::VideoCapture
- 用于保存视频。
cv::imread("/path/to/img", -1)
- 读取图片。
- 读一个参数是图片地址,第二个参数是图像颜色选择。
- 视频对应的参数:
cv::CAP_PROP_POS_FRAMES
:当前位置(在第几帧)。cv::CAP_PROP_FRAME_WIDTH
:图像宽度。cv::CAP_PROP_FRAME_HEIGHT
:图像高度。cv::CAP_PROP_FRAME_COUNT
:总帧数。cv::cv::CAP_PROP_FPS
:FPS。
2.2. 数字图像处理
cv::GaussianBlur
- 高斯滤波。
cv::pyrDown()
cv::pryUp()
- 图像金字塔,其实就是按比例缩小变大。
cv::cvtColor(img_rgb, img_gry, cv::COLOR_BGR2GRAY)
- 改变图像的color map。
- 第一个参数是输入图像,第二个参数是输出图像,第三个参数是颜色变换目标。
- 第一第二个参数都是
cv::Mat
对象。
cv::Canny
- 边缘检测的一种算法。
cv::logPolar
cv::Point2f
2.3. 应用
读取视频
1
2
3
4
5
6
7
8cv::VideoCapture cap;
cap.open(std::string(argv[1]));
cv::Mat frame;
for(;;) {
cap >> frame;
if(frame.empty()) break;
}获取/设置图像中某一位置的像素值
1
2
3
4
5
6
7
8
9
10
11
12int x = 16, y = 32;
cv::Mat img;
img = cv::imread(argv[1]);
# 设置某一位置的像素值
img.at<uchar>(x, y) = 128;
# 获取某一位置的像素值
cv::Vec3b intensity = img.at<cv::Vec3b>(y, x);
uchar blue = intensity[0];
uchar green = intensity[1];
uchar red = intensity[2];新建视频文件
1
2
3
4
5
6
7
8double fps = capture.get(cv::CAP_PROP_FPS);
cv::Size size((int)capture.get(cv::CAP_PROP_FRAME_WIDTH),
(int)capture.get(cv::CAP_PROP_FRAME_HEIGHT));
cv::VideoWriter writer;
writer.open(argv[2], CV_FOURCC('M', 'J', 'P', 'G'), fps, size);
while True:
...
writer << frame;