边缘检测是图像处理中的一种传统算法,可以用来做物体检测。偶然间看到一个例子,形态学操作实为巧妙,稍作分析记录下来,同时分享给像我一样的小白。代码经过整理如下:
#include<iostream>
#define max(a,b) a>b?a:b
using namespace std;
int main()
{
cv::Mat pupil_image = cv::imread("test.jpg",0);
cv::Mat binary_img, spec_mask, kernel;
cv::Mat histogram;
int histSize;
histSize = 256;
float range[] = { 0, 256 };
const float* histRange = { range };
int max_intensity = 40, lowest_spike_index = 255, highest_spike_index =0;
cv::calcHist(&pupil_image, 1, 0, cv::Mat(), histogram, 1, &histSize, &histRange, true, false);
for (int i = 0; i < histogram.rows; i++) {
const float intensity = histogram.at<float>(i, 0);
if (intensity > 40) {
max_intensity = max(intensity, max_intensity);
lowest_spike_index = min(lowest_spike_index, i);
highest_spike_index = max(highest_spike_index, i);
}
}
cv::inRange(pupil_image, cv::Scalar(0), cv::Scalar(lowest_spike_index + 20), binary_img);

这篇博客探讨了如何使用OpenCV进行边缘检测,特别是通过形态学操作来过滤图像中的高亮度部分,保留较暗区域的边缘。作者分享了一个例子,展示了原图、直接边缘检测、开操作和滤波后的效果,强调了cv::min函数在过滤高光边缘方面的巧妙应用。
最低0.47元/天 解锁文章
4903

被折叠的 条评论
为什么被折叠?



