So I am trying to multiply an intensity image with 0.5 and subtract it from each color channel using pixel wise operations like `ptr` and check that the values do not become negative, i.e. the new (R, G, B) values
are (max(R − 0.5I, 0), max(G − 0.5I, 0), max(B − 0.5I, 0)). I am an OpenCV novice, here's the code I came up with (obviously doesn't work). Any pointers will be really helpful:
void pixelwiseSubtraction(Mat& bgrImg, Mat& grayImg, Mat& result) {
cvtColor(bgrImg, grayImg, CV_BGR2GRAY);
Mat gray_half;
cvtColor(grayImg * 0.5, gray_half, CV_GRAY2BGR);
if(true){
for (int i = 0; i < gray_half.rows; ++i)
{
// point to first color in row
uchar* pixel = gray_half.ptr(i);
uchar* bgr_pixel = bgrImg.ptr(i);
for (int j = 0; j < gray_half.cols; ++j)
{
bgr_pixel -= pixel;
}
}
}
result = bgrImg;
}
I have an `error: invalid conversion from ‘int’ to ‘uchar* {aka unsigned char*}’ [-fpermissive]
bgr_pixel -= pixel;` error. How can I do the operation?
The not pixel-wise version is this:
void subtractIntensityImage(Mat& bgrImg, Mat& grayImg, Mat& result) {
cvtColor(bgrImg, grayImg, CV_BGR2GRAY);
Mat gray_half;
cvtColor(grayImg * 0.5, gray_half, CV_GRAY2BGR);
// 2. subtract that from original:
subtract(bgrImg, gray_half, result);
}
Thanks.
↧