使用OpenCV C ++隔离图像阴影

时间:2018-02-13 04:25:11

标签: c++ opencv

我已经看到了一些关于如何使用OpenCV和C ++从图像中删除阴影的算法。我环顾四周,但是找不到擦除阴影的方法,只能将它存储在新的图像上。 我正在使用此代码将原始图像(我从Internet获得)转换为HSV颜色空间,更改V = 180的值,以某种方式删除阴影,然后将图像转换回BGR色彩空间。我对如何提取'无能为力删除的阴影并将其保存到不同的图像...

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>

using namespace cv;
using namespace std;

int main()
{
    Mat srcImg;
    Mat hsvImg;
    Mat bgrImg;

    srcImg = imread("pcb-2008.jpg");
    cvtColor(srcImg, hsvImg, CV_BGR2HSV);
    imwrite("1.hsv.jpg", hsvImg);

    Mat channel[3];
    split(hsvImg, channel);
    channel[2] = Mat(hsvImg.rows, hsvImg.cols, CV_8UC1, 180);
    merge(channel, 3, hsvImg);
    imwrite("2.hsvNoShadow.jpg", hsvImg);

    cvtColor(hsvImg, bgrImg, CV_HSV2BGR);
    imwrite("3.backToBgr.jpg", bgrImg);

    return 0;
 } 

Sample image of a PCB

0 个答案:

没有答案