使用OpenCV实现Halcon算法(6)dyn

阅读: 评论:0

使用OpenCV实现Halcon算法(6)dyn

使用OpenCV实现Halcon算法(6)dyn

先看halcon算子的使用:

read_image (Image,'photometric_stereo/embossed_01')
mean_image (Image,ImageMean,60,60)
dyn_threshold (Image, ImageMean, RegionDynThresh, 15, 'not_equal')

再看OpenCV的实现:

void CImagePreprocessing::dynamic_threshold_referHalcon(cv::Mat &frame_gray, int ksize, int offset) //仿Halcon
{cv::Mat srcMean;cv::Mat binary1;cv::Mat binary2;//均值滤波blur(frame_gray, srcMean, cv::Size(9, 9));//动态阈值binary1 = cv::Mat::zeros(frame_gray.size(), CV_8UC1);_HalconDynThreshold(frame_gray, srcMean, binary1, offset, Equal);
}void CImagePreprocessing::_HalconDynThreshold(cv::Mat &src, cv::Mat &srcMean, cv::Mat &result, int offset, int LightDark)
{//使用Opencv实现Halcon中的动态阈值//src是原图,灰度图//srcMean是平滑滤波之后的图//最好不要把Offset这个变量设置为0,因为这样会导致最后找到太多很小的regions,而这基本上都是噪声。//所以这个值最好是在5-40之间,值选择的越大,提取出来的regions就会越小。int r = ws; //高int c = ls; //宽int Value = 0;for (int i = 0; i < r; i++){uchar *datasrc = src.ptr<uchar>(i); //指针访问图像像素uchar *datasrcMean = srcMean.ptr<uchar>(i);uchar *dataresult = result.ptr<uchar>(i);for (int j = 0; j < c; j++){switch (LightDark){case Light:Value = datasrc[j] - datasrcMean[j];if (Value >= offset){dataresult[j] = 255;}break;case Dark:Value = datasrcMean[j] - datasrc[j];if (Value >= offset){dataresult[j] = 255;}break;case Equal:Value = datasrc[j] - datasrcMean[j];if (Value >= -offset && Value <= offset){dataresult[j] = 255;}break;case Not_equal:Value = datasrc[j] - datasrcMean[j];if (Value < -offset || Value > offset){dataresult[j] = 255;}break;default:break;}}}
}

本文发布于:2024-03-05 00:56:50,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/1709617023120792.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:Halcon(一)
标签:算法   OpenCV   Halcon   dyn
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23