原图
左边是opencv,右边是matlab
直接上代码:
Mat a = imread("11.jpg");
Mat b,c;
vector<Mat>channels;
///*for (int i = 0; i < a.rows; i++)
//{
// for (int j = 0; j < a.cols; j++)
// {
// uchar* data = a.ptr<uchar>(i, j);
// printf("%d ", *data);
// }
// printf("\n");
//}*/
//cvConvertScale
Mat channels_m[3];
cvtColor(a, b, CV_BGR2HSV);
convertScaleAbs(b, c, 1.0, 0);
split(c, channels);
channels_m[0] = channels[0];
channels[0] = channels[2];
channels[2] = channels_m[0];
merge(channels, c);
imshow("b", c);
waitKey(0);
这里由于opencv读取是bgr的顺序读的,在进行bgr转成hsv之后,把hsv三个分量分别读出来,然后把第一个通道和第三个通道换一下,重新合成。就和matlab基本一样了