边缘检测是图像处理中的一种传统算法,可以用来做物体检测。偶然间看到一个例子,形态学操作实为巧妙,稍作分析记录下来,同时分享给像我一样的小白。代码经过整理如下:
#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_inde