基于直方图均衡化的图像轻微条纹检测(opencv实现)

背景:在做的一个camera模组项目,装机后发现图像有轻微条纹。

拿到不良camer模组后,在工装上抓取图片,能看到轻微条纹,如下,需要检测出该条纹。

在暗环境下,拉高AGain和曝光,表现如下:

暗环境下的图片处理后还是比较明显的

检测思路:在暗环境下测试,提高图片对比度,然后二值化处理,使条纹部分与其它区域区分开。

对于这种对比度较低的图像,适合使用直方图均衡化来增强图像对比度。处理后的图像如下:

均衡化处理后:

转为灰度图像后二值化并进行滤波:

而正常图像处理后如下:

图片差异还是很明显的,这样就很容易检测出来了。

基于opencv的处理代码:

cv::Mat src = cv::imread(strfilename);

if (src.empty())

{

// pritn error

}

cv::Mat processImg = src.clone();

// 直方图均衡处理

cv::Mat bgr[3];

cv::split(processImg, bgr);

for (int i = 0; i < 3; i++)

{

cv::equalizeHist(bgr[i], bgr[i]);

}

cv::merge(bgr, 3, processImg);

cv::cvtColor(processImg, processImg, cv::COLOR_BGR2GRAY);

// 阈值处理

cv::Mat threImg;

double thre = 200; // 按需要设置阈值

cv::threshold(processImg, threImg, thre, 255, cv::THRESH_BINARY);

// 中值滤波处理

cv::medianBlur(threImg, processImg, 7);

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: