C++ cvSetImageROI使用灰度和彩色图像
我试图设置一个感兴趣的图像区域,并将一个图像添加到另一个图像中。一个图像是遮罩(灰度),另一个是彩色图像。现在,我正在做C++ cvSetImageROI使用灰度和彩色图像,c++,c,opencv,roi,C++,C,Opencv,Roi,我试图设置一个感兴趣的图像区域,并将一个图像添加到另一个图像中。一个图像是遮罩(灰度),另一个是彩色图像。现在,我正在做 IplImage * _newImg = newImage.getCvImage(); IplImage * _oldBG = tempBG.getCvImage(); CvRect rect = cvRect(100, 100, _newImg->width, _newImg->height); cvSetImageROI(_oldBG, rect); c
IplImage * _newImg = newImage.getCvImage();
IplImage * _oldBG = tempBG.getCvImage();
CvRect rect = cvRect(100, 100, _newImg->width, _newImg->height);
cvSetImageROI(_oldBG, rect);
cvAdd(_newImg, _oldBG, _newImg, NULL);
cvResetImageROI(_oldBG);
这会导致以下错误:
OpenCV错误:中的断言失败(src1.size()==src2.size()
binaryMaskOp
我已经完成了代码,两张图片大小相同。我假设问题是一个图像是彩色的,另一个是灰度的。是否有方法使用不同通道的图像执行上述步骤
谢谢。OpenCV主干中的断言是
CV_断言(src1.size==dst.size&&src1.channels()==dst.channels())代码>,位于
您最好验证图像大小和通道数是否相同,如果它们相同,则cvAdd
应该能够正常添加它们。我建议为cvAdd
的结果参数设置一个单独的结果IplImage
使用cvSplit
将图像分割为单独的通道
对于RGB
// Allocate image planes
IplImage* r = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* g = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* b = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
// Split image onto the color planes
cvSplit( src, r, g, b, NULL );
对于RGBA
// Allocate image planes
IplImage* r = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* g = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* b = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* a = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
// Split image onto the color planes
cvSplit( src, r, g, b,a NULL );
cvMerge
与cvSplit
相反
然后,您可以对结果分割图像逐个调用cvAdd
,并在最后将结果合并回来