我已经看到了一些关于如何使用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;
}