0

我正在尝试设置感兴趣的图像区域并将一个图像添加到另一个图像中。一个图像是蒙版(灰度),另一个是彩色图像。现在,我在做

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 错误:binaryMaskOp 中的断言失败 (src1.size() == src2.size()),

我已经浏览了代码,两个图像的大小相同。我假设问题是一个图像是彩色的,另一个是灰度图像。有没有办法使用具有不同通道的图像执行上述过程?

谢谢。

4

1 回答 1

1

OpenCV 主干中的断言CV_Assert( src1.size == dst.size && src1.channels() == dst.channels() );位于此处

您最好验证图像大小和通道数是否相同,如果它们cvAdd应该能够正常添加它们。我建议为 result 参数设置一个单独的结果 IplImage cvAdd

使用 . 将图像拆分为其单独的通道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一张一张调用生成的分割图像,并在最后合并结果。

于 2012-03-17T23:02:40.723 回答