OpenCV学习总结

OpenCV学习总结

  1. 基础知识

读取图像
imread功能是加载图像文件成为一个Mat对象,其中第一个参数表示图像文件名称,第二个参数,表示加载的图像是什么类型,支持常见的三个参数值
IMREAD_UNCHANGED(< 0) 表示加载原图,不做任何改变
IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来
IMREAD_COLOR(> 0) 表示把原图作为RGB图像加载进来

图像复制
部分复制:一般情况下只会复制Mat对象的头和指针部分,不会复制数据部分
Mat A = imread(imgFilePath);
Mat B(A) //部分复制
完全复制:如果想把Mat对象的头部和数据部分一起复制,可以通过如下两个API实现
Mat F = A.clone(); 或 Mat G; A.copyTo(G);
Mat new_image = Mat::zeros(image.size(), image.type()); 创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0

获取图像基本信息
int channels = image.channels();//图像波段数
int rows = image.rows;
int cols = image.cols * channels;

读一个GRAY像素点的像素值(CV_8UC1)
Scalar intensity = img.at(y, x); //注意xy 位置
Scalar intensity = img.at(Point(x, y));

读一个RGB像素点的像素值
Vec3f intensity = img.at(y, x);
float blue = intensity.val[0];
float green = intensity.val[1];
float red = intensity.val[2];

修改图像像素值
灰度图像
img.at(y, x) = 128;
RGB三通道图像
img.at(y,x)[0]=128; // blue
img.at(y,x)[1]=128; // green
img.at(y,x)[2]=128; // red
空白图像赋值
img = Scalar(0);
ROI选择
Rect r(10, 10, 100, 100);
Mat smallImg = img®;

  1. 常用API

//这个函数的功能是确保RGB值得范围在0~255之间
saturate_cast(288)

//将图像转化为位图 灰度或者RGB
cvtColor(src, dst, CV_RGBA2BGR);

//自定义卷积函数
Mat kernel = (Mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(src, dst, src.depth(), kernel); //其中src与dst是Mat类型变量、src.depth表示位图深度,有32、24、8等。

图像混合
在这里插入图片描述
double alpha = 0.3;
addWeighted(src1, (1 - alpha), src2, alpha, 0.0, dest);

金字塔
上采样(cv::pyrUp) – zoom in 放大
降采样 (cv::pyrDown) – zoom out 缩小
pyrUp(Mat src, Mat dst, Size(src.cols2, src.rows2))
//生成的图像是原图在宽与高各放大两倍
pyrDown(Mat src, Mat dst, Size(src.cols/2, src.rows/2))
//生成的图像是原图在宽与高各缩小1/2

图像二值化
在这里插入图片描述
凸包检测
凸包检测判断是否左转,如果左转则删掉。
霍夫检测
霍夫直线变换原理,检测直线前提是边缘检测已经完成,角度不断变化会绘制出一条线,每个像素值都可以绘制出一条线,如果出现一定数量的交点检测出直线;
霍夫圆检测原理,已知XY控制R如果角度在0-360度变化如果交点比较多则认为是圆,有点像反向投影通过多个圆绘制交点;

  1. 平滑算子

均值模糊 blur(Mat src, Mat dst, Size(xradius, yradius), Point(-1,-1));
特点:均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
中值模糊 medianBlur(Mat src, Mat dest, ksize)
特点:中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。中值对椒盐噪声有很好的抑制作用。
高斯模糊 GaussianBlur(Mat src, Mat dst, Size(11, 11), sigmax, sigmay);
其中Size(x, y), x, y 必须是正数而且是奇数
特点:图像大多数噪声均属于高斯噪声,因此高斯滤波器应用也较广泛。高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像去噪。
双边模糊 bilateralFilter(src, dest, d=15, 150, 3);
特点:高斯双边模糊是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变。
参考:https://blog.csdn.net/fan1102958151/article/details/106980216
计算点到多边形的距离pointPolygonTest;

  1. 形态学操作

膨胀和腐蚀是相对当背景色为黑色,物体为白色,膨胀时白色膨胀;
开运算是先腐蚀后膨胀,其作用是:分离物体,消除小区域。特点:消除噪点,去除小的干扰块,而不影响原来的图像。
闭运算与开运算相反,是先膨胀后腐蚀,作用是消除/“闭合”物体里面的孔洞,特点:可以填充闭合区域。
顶帽操作:原图像与“开运算“的结果图之差;因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。
黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。 黑帽运算用来分离比邻近点暗一些的斑块。
积分图查找表
积分图查找表是将计算值进行累加然后通过计算右下角+左上角-右上角-左下角的值来计算当前像素点的累加和。

  1. 距离变换与分水岭变换步骤

/第一步:将白色背景变成黑色-目的是为后面的变换做准备/
/第二步:使用filter2D与拉普拉斯算子实现图像对比度提高,sharp锐化拉普拉斯得到图像边缘用原图减去边缘,差值更大,图像得到锐化,为图像二值化做准备/
/第三步:转为二值图像通过threshold/
/第四步:距离变换/
/第六步:使用阈值,再次二值化,得到标记/
/第七步:腐蚀得到每个Peak - erode/
/第八步:发现轮廓 – findContours/
/第九步:绘制轮廓- drawContours/
/第十步:分水岭变换 watershed/

  1. 提取边缘算法

1.Sobel与Scharr算子2.Laplance算子3.Canny边缘检测;
Sobel与Scharr算子通过计算XY的像素值差异来提取边缘,Laplance算子通过计算二阶导数来提取边缘,但是对噪声比较敏感所以可以先使用高斯滤波去除噪声,Canny边缘检测使用算子计算出边缘并通过非最大值抑制和双阈值限制来优化结果;

  1. 待更新

轮廓发现函数并绘制
直方图比较方法
匹配算法:1.直方图反投影算法2.模板匹配算法3.计算图像矩;
提取特征点算法:1.Harris角点检测2.Shi-Tomasi角点检测3.自定义角点检测器4.SURF特征检测5.SIFT特征检测6.HOG特征提取7.LBP局本特征提取8.Haar特征检测9.AKAZE局部匹配10.Brisk特征检测与匹配;
特征点匹配算法:1.Brute-Force匹配,2.FLANN快速特征匹配

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,OpenCV是一个开源计算机视觉和机器学习软件库,用于开发图像和视频处理应用程序。通过使用OpenCV,您可以读取摄像头并显示实时图像,打开视频文件或摄像头文件,并获取视频的相关信息,例如帧宽度、帧高度、帧率和总帧数。 对于学习OpenCV,你可以按照以下步骤行: 1. 安装OpenCV库:在开始学习OpenCV之前,您需要从OpenCV官方网站下载和安装OpenCV库。根据您的操作系统和编程语言选择合适的版本。 2. 学习基本概念:熟悉OpenCV的基本概念和术语,例如图像和视频的加载、显示、保存以及常用的图像处理操作,如滤波、边缘检测和特征提取等。 3. 掌握OpenCV函数和类:深入了解OpenCV提供的函数和类,例如cv::Mat用于图像和矩阵操作,cv::VideoCapture用于读取和处理视频,以及cv::imshow和cv::waitKey等用于显示图像的函数。 4. 实践项目:通过完成一些实践项目来应用您所学到的知识。例如,利用OpenCV实现人脸检测、目标追踪、图像识别等。 5. 学习资料和资源:查找和阅读OpenCV的官方文档、教程和示例代码,参与开源社区讨论和交流,加入相关的论坛和邮件列表等。 总结起来,学习OpenCV包括安装OpenCV库、学习基本概念、掌握OpenCV函数和类、实践项目以及查找和阅读相关资料和资源。通过不断实践和学习,您将能够更好地理解和应用OpenCV库来开发图像和视频处理应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值