cornerHarris角点检测
视频讲解如下:
源码下载:https://download.csdn.net/download/gs1069405343/85491731
在本章节中给大家演示cornerHarris角点检测,主要函数:cornerHarris。
当前代码同样是在毛星云的代码基础上进行扩展优化的。
这里要注意一下,OpenCvSharp3-AnyCPU 版本找不到 CornerHarris 方法,所以必须采用OpenCvSharp4 版本才行。
当前系列所有demo下载地址:
https://github.com/GaoRenBao/OpenCv4-Demo
不同编程语言对应的OpenCv版本以及开发环境信息如下:
语言 | OpenCv版本 | IDE |
C# | OpenCvSharp4.4.8.0.20230708 | Visual Studio 2022 |
C++ | OpenCv-4.5.5-vc14_vc15 | Visual Studio 2022 |
Python | OpenCv-Python (4.6.0.66) | PyCharm Community Edition 2022.1.3 |
首先呢,我们需要准备一张测试图片。(不想下载工程的童鞋,可直接复制下面的图片和代码)

运行效果如下(C++):

C#版本代码如下:
C#版本需要安装“OpenCvSharp4”、“OpenCvSharp4.runtime.win”两个库才行。不然会报错。
如果需要使用“ BitmapConverter.ToBitmap”操作,则需要追加安装“OpenCvSharp4.Extensions”库。
using OpenCvSharp;
namespace demo
{
internal class Program
{
static void Main(string[] args)
{
// 以灰度模式载入图像并显示
Mat srcImage = Cv2.ImRead("../../../images/home4.jpg", 0);
Cv2.ImShow("原始图", srcImage);
// 进行Harris角点检测找出角点
// OpenCvSharp3-AnyCPU 版本找不到 CornerHarris 方法.
// 必须采用 OpenCvSharp4 版本才行。
Mat cornerStrength = new Mat();
Cv2.CornerHarris(srcImage, cornerStrength, 2, 3, 0.01);
// 对灰度图进行阈值操作,得到二值图并显示
Mat harrisCorner = new Mat();
Cv2.Threshold(cornerStrength, harrisCorner, 0.00001, 255, ThresholdTypes.Binary);
Cv2.ImShow("角点检测后的二值效果图", harrisCorner);
Cv2.WaitKey(0);
}
}
}
C++版本代码如下:
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
//以灰度模式载入图像并显示
Mat srcImage = imread("../images/home4.jpg", 0);
imshow("原始图", srcImage);
//进行Harris角点检测找出角点
Mat cornerStrength;
cornerHarris(srcImage, cornerStrength, 2, 3, 0.01);
//对灰度图进行阈值操作,得到二值图并显示
Mat harrisCorner;
threshold(cornerStrength, harrisCorner, 0.00001, 255, THRESH_BINARY);
imshow("角点检测后的二值效果图", harrisCorner);
waitKey(0);
return 0;
}
Python版本代码如下:
import cv2
import numpy as np
import random
# 以灰度模式载入图像并显示
srcImage = cv2.imread("../images/home4.jpg", 0)
# 显示原图
cv2.imshow("srcImage", srcImage)
# 进行Harris角点检测找出角点
cornerStrength = cv2.cornerHarris(srcImage,2, 3, 0.01)
# 对灰度图进行阈值操作,得到二值图并显示
ret, harrisCorner = cv2.threshold(cornerStrength, 0.00001, 255, cv2.THRESH_BINARY)
cv2.imshow("End", harrisCorner)
cv2.waitKey(0)
cv2.destroyAllWindows()