OpenCV实现角点检测(cornerHarris)
Opencv 实现 检测
2023-09-14 09:05:26 时间
1、概述
案例:使用cornerHarris实现角点检测,并调节其参数看看不同参数下的不同效果
技术:Qt+C+++OpenCV
角点检测函数介绍:
cornerHarris(src,dst,blockSize,ksize,k,BORDER_DEFAULT)
1.src:必须是单通道8位或者32位浮点图像
2.dst:存储角点结果图像,它的格式是CV_32FC1,图像大小和原图大小一致
3.blockSize:扫描窗口的大小,ps:此值越大检测到的结果越多
4.ksize:Sobel算子的大小,四邻域、八邻域等,此值越大检测结果越多
5.k:此值是个经验值一般只用0.04,其取值区间是0.04~0.06之间
实现角点检测的步骤:
1.载入图像
2.将图像转为灰度图,因为cornerHarris的输入只能是8位或者32位的灰度图像
3.执行角点检测,并将检测到的结果输出到dst中
4.将检测到的值归一化到0~255之间,因为输出图像dst检测到的值是浮点数
5.将归一化后的图像像素值取绝对值,因为归一化后的图像有可能是负数
6.标定阀值,并循环输出图像,如果像素大于阀值就说明是角点(绘制出来),小于就直接舍弃
实验结果(同等条件下):
1.blockSize越大检测到的角点就越多
2.k的值越大检测到的角点越多
3.ksize的值越大检测到的角点越多
4.thresh阀值越大可用角点越少,越大可用角点也就越多
其中前三个值大道一定程度的时候全屏幕都是角点,非常不准确,需要根据实际的图像情况实时的调节自己的参数。
2、代码示例
src = imread(filePath);
if(src.empty()){
cout << "图片不能为空"<<endl;
return;
}
// imshow("src",src);
cvtColor(src,gray,COLOR_BGR2GRAY);
// imshow("gray",gray);
Mat dst,norm_dst, normScaleDst;
cornerHarris(gray,dst,blockSize,ksize,k,BORDER_DEFAULT);//dst输出参数一般32位浮点
//将dst数据归一化到0~255之间
normalize(dst,norm_dst,0,255,NORM_MINMAX, CV_32FC1, Mat());
// imshow("normalize",norm_dst);
//取绝对值
convertScaleAbs(norm_dst,normScaleDst);
resultImg = src.clone();
for (int row = 0; row < resultImg.rows; row++) {
uchar * currentRow = normScaleDst.ptr(row);
for (int col = 0; col < resultImg.cols; col++) {
int value = (int)*currentRow;
if(value>thresh){
circle(resultImg,Point(col,row),2,Scalar(0,0,255),2,LINE_8,0);
}
currentRow++;//用指针速度快
}
}
3、示例图片
(图片上的红色小圆就是绘制出来的角点)
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
相关文章
- Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术
- OpenCV每日函数 图像过滤模块 (11) getGaussianKernel计算高斯卷积核函数
- Opencv学习笔记 图像清晰度评价
- CV之IPE之DNN:基于OpenPose和OpenCV利用DNN算法的.pb文件实现对视频单个体进行实时姿态估计检测(以詹姆斯扣篮+美女跳舞为例)案例应用
- OpenCV使用LBPHFaceRecognizer来实现人脸识别
- OpenCV使用分水岭算法实现图像分割
- 【华为云技术分享】【昇腾】【玩转Atlas200DK系列】Atlas 200 DK安装python的hiai库以及opencv
- 雕刻效果的实现【OpenCV+QT】
- opencv 高斯模糊
- 在OpenCV里深入浅出地实现简单车道检测
- 在OpenCV里实现不规则ROI的选取
- 在OpenCV里实现向图像添加椒盐噪声
- 在OpenCV里实现极坐标变换2
- 在OpenCV里实现正规化变换2
- 在OpenCV里实现全局阈值分割1
- 在OpenCV里实现Prewitt算子
- 在OpenCV里实现Scharr算子
- 在OpenCV里实现谱残差的显著性检测
- 关于OpenCV for Python入门之Dlib实现人脸检测
- Opencv实现图形的几何变换【python】
- OpenCV-PyQT项目实战(7)项目案例03:鼠标框选
- 【OpenCV 例程 300篇】247. 特征检测之最大稳定极值区域(MSER)
- 人脸检测实战:使用opencv加载深度学习模型实现人脸检测
- C++ - opencv应用实例之矩形框检测
- Opencv 基本操作二 实现label2rgb,将灰度图转化为彩色图