从照片opencv删除眩光

所以,即时通讯使用opencv捕获文件,扫描和裁剪。 当房间里没有灯光的时候,它就完美地工作了。 当房间里有一些灯光,桌子上有一道眩光,文件靠近它时,它也会把眩光作为矩形的一部分。

如何从照片中删除眩光?

这里是代码即时通讯使用得到我想要的图像:

Mat &image = *(Mat *) matAddrRgba; Rect bounding_rect; Mat thr(image.rows, image.cols, CV_8UC1); cvtColor(image, thr, CV_BGR2GRAY); //Convert to gray threshold(thr, thr, 150, 255, THRESH_BINARY + THRESH_OTSU); //Threshold the gray vector<vector<Point> > contours; // Vector for storing contour vector<Vec4i> hierarchy; findContours(thr, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); // Find the contours in the image sort(contours.begin(), contours.end(), compareContourAreas); //Store the index of largest contour bounding_rect = boundingRect(contours[0]); rectangle(image, bounding_rect, Scalar(250, 250, 250), 5); 

这里是一个眩光即时通讯谈论的照片:

在这里输入图像说明

我发现的东西是使用inRange,find合适的标量颜色和我们的油画删除光线。 这是一个代码片断,但它总是崩溃,说它需要chanels的8位图像。

 Mat &image = *(Mat *) matAddrRgba; Mat hsv, newImage, inpaintMask; cv::Mat lower_red_hue_range; inpaintMask = Mat::zeros(image.size(), CV_8U); cvtColor(image, hsv, COLOR_BGR2HSV); cv::inRange(hsv, cv::Scalar(0, 0, 215, 0), cv::Scalar(180, 255, 255, 0), lower_red_hue_range); image = lower_red_hue_range; inpaint(image, lower_red_hue_range, newImage, 3, INPAINT_TELEA); 

Solutions Collecting From Web of "从照片opencv删除眩光"

之前我已经处理过这个问题,照明的改变在计算机视觉中一直是检测和描述图像的一个问题。 我实际上训练了一个HSV色彩空间的分类器,而不是RGB / BGR,它将图像与入射光的变化映射到没有突然出现明亮/黑暗斑点的图像(这将是标签)。 这对我很好,但是,图像总是相同的背景(我不知道你是否也有这个)。

当然,机器学习可以解决这个问题,但这可能是一个矫枉过正的问题。 在上面提到的时候,我碰到了CLAHE ,这个CLAHE和当地的对比增强效果很好。 我build议你在检测轮廓之前尝试一下。 此外,您可能需要在不同的色彩空间上工作,例如HSV / Lab / Luv,而不是RGB / BGR。 您可以将CLAHE分别应用于每个频道,然后合并它们。

让我知道如果你需要一些其他的信息。 我用python实现了这个图像,它的工作原理非常好,但是我会把编码留给你。 我可能会更新几天之后得到的结果(希望你先拿到它们))。 希望能帮助到你。

灰色的图像

CLAHE之后HSV的V通道 -  clipLimit = 10,TileGridSize =(16,16)