【OpenCV】入门基本操作介绍及代码实现 C++

命名规范

匈牙利命名法:变量名=属性+类型+对象描述

图像的读取

Mat src = imread("D:/images/1.jpg");//图像读取 默认三通道 深度为24
namedWindow("输入窗口",WINDOW_FREERATIO);//创建适应的窗口 
imshow("input",src);//图像读取 窗口大小默认为autosize
waitKey();//停顿
destroyAllWindows();//销毁所有窗口

图像的色彩通道

imshow只支持八位(即256)或浮点数的图片 八位RGB通道顺序为BGR
HSV H调整色相0~180 S调整饱和度 V调整亮度
【OpenCV】入门基本操作介绍及代码实现 C++_第1张图片

imwrite("D:/test.png",src);//存储图像

图像的基本结构【OpenCV】入门基本操作介绍及代码实现 C++_第2张图片

【OpenCV】入门基本操作介绍及代码实现 C++_第3张图片
注意:赋值法不是拷贝一份 而是在原图上进行修改 指向一样的图像

//创建空白图像
Mat src = Mat::zeros(Size(8,8),CV_8UC3);//初始化每个像素的每个通道都为0 8位unsigned char三通道
src = Scalar(127,127,127);//设置颜色 BGR
src.cols;//获取宽度 即列数
src.rows;//获取高度 即行数
src.channels();//获取通道数

图像像素的读写

数组遍历

int w = image.cols;//图像宽度 即列数
int h = image.rows;//图像高度 即行数
int dims = image.channels();//图像的通道数
for(int row=0;row < h;row++){
	for(int col = 0; col < w;col++){
		if(dims == 1){//单通道 即为灰度图像
			int pv = image.at<uchar>(row,col);//注意 通过行列来读取 x为行row y为列col
			image.at<uchar>(row,col)= 255-pv;//取反
		}
		if(dims == 3){//彩色图像是三通道
			Vec3b bgr = image.at<Vec3b>(row,col();/
			image.at<Vec3b>(row,col)[0] = 255-bgr[0];//第0个通道 即B 用Vector数组存
			image.at<Vec3b>(row,col)[0] = 255-bgr[0];//第1个通道 即G 
			image.at<Vec3b>(row,col)[0] = 255-bgr[0];//第2个通道 即R 
		}
	}
}
imshow("像素读写演示",image);

指针遍历(比较快)
【OpenCV】入门基本操作介绍及代码实现 C++_第4张图片

图像像素类型归一化

【OpenCV】入门基本操作介绍及代码实现 C++_第5张图片

【OpenCV】入门基本操作介绍及代码实现 C++_第6张图片

图像的旋转

【OpenCV】入门基本操作介绍及代码实现 C++_第7张图片
M计算的矩阵 flags插值方式 orderMode边缘方式 borderValue边缘颜色 默认黑色

【OpenCV】入门基本操作介绍及代码实现 C++_第8张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第9张图片
设置好参数,M为计算的矩阵,即可旋转成功
【OpenCV】入门基本操作介绍及代码实现 C++_第10张图片

图像旋转后窗口大小自适应大【OpenCV】入门基本操作介绍及代码实现 C++_第11张图片【OpenCV】入门基本操作介绍及代码实现 C++_第12张图片
代码参考网课【不要再看那些过时的OpenCV老教程了】2022巨献,OpenCV零基础小白最新版全套教程(人工智能机器视觉教程)

图像的直方图

【OpenCV】入门基本操作介绍及代码实现 C++_第13张图片

绘制一维直方图
【OpenCV】入门基本操作介绍及代码实现 C++_第14张图片

图像绘制

坐标原点在左上角 最大点在右下角

形态学操作

膨胀与腐蚀

【OpenCV】入门基本操作介绍及代码实现 C++_第15张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第16张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第17张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第18张图片
ksize要为奇数 如1、3、5、7、9
RECT为矩形 ELLIPSE为椭圆
【OpenCV】入门基本操作介绍及代码实现 C++_第19张图片
如滑块调整

开操作

【OpenCV】入门基本操作介绍及代码实现 C++_第20张图片

闭操作【OpenCV】入门基本操作介绍及代码实现 C++_第21张图片

形态学额梯度【OpenCV】入门基本操作介绍及代码实现 C++_第22张图片

顶帽

【OpenCV】入门基本操作介绍及代码实现 C++_第23张图片

黑帽【OpenCV】入门基本操作介绍及代码实现 C++_第24张图片

顶帽与黑帽相关API【OpenCV】入门基本操作介绍及代码实现 C++_第25张图片

形态学操作的应用

原理方法

【OpenCV】入门基本操作介绍及代码实现 C++_第26张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第27张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第28张图片

例1【OpenCV】入门基本操作介绍及代码实现 C++_第29张图片【OpenCV】入门基本操作介绍及代码实现 C++_第30张图片
例2

【OpenCV】入门基本操作介绍及代码实现 C++_第31张图片

【OpenCV】入门基本操作介绍及代码实现 C++_第32张图片
来源:https://www.bilibili.com/video/BV1Q54y1z7kz?p=13&spm_id_from=pageDriver&vd_source=fc2d039d218c5eef32a73f7792c1da2f

bitwise()用法:
OpenCV之bitwise_and、bitwise_not等图像基本运算及掩膜
bitwise_not是对二进制数据进行“非”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“非”操作。

图像阈值

【OpenCV】入门基本操作介绍及代码实现 C++_第33张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第34张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第35张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第36张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第37张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第38张图片

边缘处理

【OpenCV】入门基本操作介绍及代码实现 C++_第39张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第40张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第41张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第42张图片

Sobels算子

【OpenCV】入门基本操作介绍及代码实现 C++_第43张图片
sobel算子对噪点比较敏感,需要先用高斯模糊平滑,再转灰度,用sebel算子求梯度X和Y,最后求振幅图像。
【OpenCV】入门基本操作介绍及代码实现 C++_第44张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第45张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第46张图片

Canny算法

【OpenCV】入门基本操作介绍及代码实现 C++_第47张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第48张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第49张图片
canny会自动做高斯模糊

霍夫变化

【OpenCV】入门基本操作介绍及代码实现 C++_第50张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第51张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第52张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第53张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第54张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第55张图片
一般用这个函数
【OpenCV】入门基本操作介绍及代码实现 C++_第56张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第57张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第58张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第59张图片

【OpenCV】入门基本操作介绍及代码实现 C++_第60张图片

像素重映射

【OpenCV】入门基本操作介绍及代码实现 C++_第61张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第62张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第63张图片

模板匹配

【OpenCV】入门基本操作介绍及代码实现 C++_第64张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第65张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第66张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第67张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第68张图片
【OpenCV】入门基本操作介绍及代码实现 C++_第69张图片

直线检测案例:https://www.bilibili.com/video/BV1Q54y1z7kz?p=67&spm_id_from=pageDriver&vd_source=fc2d039d218c5eef32a73f7792c1da2f

你可能感兴趣的:(C++,OpenCV,opencv,计算机视觉,图像处理,c++)