使用的测试环境:win+vc2022+MFC+Opencv
未进行函数优化和整理仅供学习参考,以下是实现的主要代码,测试工程获取:链接:https://pan.baidu.com/s/1ilVhMapQI1ZBNPPNgJdN9w?pwd=a8a1 提取码:a8a1
搭建opencv环境
代码实现
#图像滤波
GaussianBlur(Mat_edges, Mat_edges, Size(9, 9), 3, 3);
#canny
cvCanny(Cany_Image, Cany_Image, 100, 255, 3);//输入图像,输出图像(输出的边缘图像 ,也是单通道的,但是是黑白的),下限值,上限值,
#图像膨胀
cvDilate(Cany_Image, Cany_Image, myModel, 2);//第一个image1位输入图像,第二个位输出图像,myModel为腐蚀结构元素,1最后一位为收缩次数
#直方图统计
float maxx = 0;
memset(hitData, 0x00, sizeof(int) * MaxNum);
for (int i = 0; i < Cany_Image->width; i++)
{
for (int j = 0; j < 400; j++)//Cany_Image->height
{
if (Cany_Image->imageData[i + j * Cany_Image->width] == 0)continue;
float tempr = sqrtf((i - certerx) * (i - certerx) + (j - certery) * (j - certery));
if (tempr > certerR)continue;
float q = AngleScal * (atan2((j - certery), (i - certerx))*180/3.1415926+180);
maxx = max(maxx, q);
if (((int)(q+0.5)) >= MaxNum)q = q - 1;
hitData[(int)(q+0.5)]++;
}
}
#描绘指针
line(Mat_Image, Point(certerx, certery), tmpPoint, Scalar(0, 0, 255), 2);
测试界面
运行效果
测试结果视频
基于OPencv的文理检测和直方图实现指针定位