我正在使用QT和OpenCV,我需要提取这个方块,但我需要使用从RGB转换到一个通道(基本上是RED)。任何建议都将受到欢迎,请随时咨询哪些功能使用。提前谢谢。
答案 0 :(得分:11)
我认为cvSplit
正是您所寻找的(docs)。例如,您可以使用它将RGB分割为R,G和B:
/* assuming src is your source image */
CvSize s = cvSize(src->width, src->height);
int d = src->depth;
IplImage* R = cvCreateImage(s, d, 1);
IplImage* G = cvCreateImage(s, d, 1);
IplImage* B = cvCreateImage(s, d, 1);
cvSplit(src, R, G, B, null);
请注意,您需要注意订购;确保原始图像实际上按R,G,B顺序排列(它有可能是B,G,R)。
答案 1 :(得分:10)
由于这是标记qt
,我将给出一个C ++答案。
// Create Windows
namedWindow("Red",1);
namedWindow("Green",1);
namedWindow("Blue",1);
// Create Matrices (make sure there is an image in input!)
Mat input;
Mat channel[3];
// The actual splitting.
split(input, channel);
// Display
imshow("Blue", channel[0]);
imshow("Green", channel[1]);
imshow("Red", channel[2]);
在OpenCV 2.4.5上测试
答案 2 :(得分:2)
据我所知,
cvtColor(src, bwsrc, CV_RGB2GRAY);
可以这样做,其中src是多通道源图像,第三个参数表示目标中的通道数。因此,您可以在OpenCV中执行此操作并在Qt界面上显示图像。
另一方面,您可以使用适当的split()方法将通道拆分为单独的单通道数组。
http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#split
答案 3 :(得分:0)
另一种方法是使用extractChannel:
cv::Mat channel;
//image is already loaded
cv::extractChannel(image, channel, 2);
这将从image
中提取第三个通道,并将结果保存在channel
中。也可以使用extractImageCOI
和mixChannels
提取特定频道。