1.头文件&命名空间
#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp> // 核心组件
#include<opencv2/highgui/highgui.hpp> // GUI
#include<opencv2/imgproc/imgproc.hpp> // 图像处理
using namespace cv;
using namespace std;
2.图片读取/显示/保存
// 读取图片,读取后格式为Mat
Mat src = imread(filepath); // string格式
// 显示图片
imshow(window_name, src); // (string, Mat)
// waitKey(0); // 持续显示
while(1){
// 直到用户按Esc退出
if(waitKey(30) == 27) break; // Esc的ASCII码编号27
}
// 图片保存
imwrite(filepath, src); // (string, Mat)
3.命名窗口(显示图片)
// namedWindow(winname, flags=WINDOW_AUTOSIZE );
// WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制)
// WINDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。
namedwindow("srcimg"); // 命名必须和imshow中的命名一致
imshow("srcimg", src);
4.读取视频文件
// Capture Video
String filename = "raw.avi"; //文件名
VideoCapture capture(filename);
while (1) {
Mat frame;
capture >> frame; // read the current frame
if (frame.empty()) break;
imshow("Read Video", frame);
waitKey(30); // delay 30ms,每一帧30ms
}
5.打开摄像头
// open the camera, edge detection
VideoCapture capture(0); // 打开摄像头
Mat edges;
while (1) {
Mat frame;
capture >> frame; // 读取当前帧
cvtColor(frame, edges, COLOR_BGR2GRAY); // 变换为灰度图
blur(edges, edges, Size(7, 7)); // 平滑滤波
Canny(edges, edges, 0, 30, 3); // Canny边缘检测
imshow("Read Video", edges); //显示图片
if(waitKey(30) >= 0) break; // delay 30 ms
}
6.imread第二、三个参数
Mat pic = imread("001.jpg", 2 | 4); // read lossless img, flag<0: 读取无损图像
Mat pic1 = imread("001.jpg", 0); // read gray img, flag=0: 读取灰度图
Mat pic2 = imread("001.jpg", 1); // read 3 channels img, flag>0: 读取三通道图像(RGB)
// 第三个参数:jpg(0-100, 图片质量, default:95)
// png(0 - 9), 越高尺寸越小, 默认3
// pgm/pbm(0 或 1)二进制格式标尺,默认1
7.addWeighted函数:合成图像
// src1,图一, 常常填一个Mat。
// alpha,图一权重
// src2,图二,需要和第一个数组拥有相同的通道数
// beta,图二权重
// dst,输出图像
// gamma,一个加到权重总和上的标量值。
// dtype,输出阵列的可选深度,有默认值-1
void addWeighted(src1, alpha, src2, beta, gamma, dst, dtype=-1)
8.合成图像实例
Mat src = imread("002.jpg");
Mat logo = imread("004.jpg");
Mat ROI = src(Rect(0, 0, logo.rows, logo.cols)); //Rect表示矩形区域:左上角(0,0),宽高(logo.rows, logo.cols)
addWeighted(ROI, 0.8, logo, 1, 0., ROI); // ROI: region of interest
imwrite("H:/CV/pic/005.jpg", src); //保存