gpt4 book ai didi

c++ - cvSetImageROI 使用灰度和彩色图像

转载 作者:行者123 更新时间:2023-11-28 08:08:19 25 4
gpt4 key购买 nike

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

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 Error: Assertion failed (src1.size() == src2.size()) in binaryMaskOp,

我已逐步完成代码,两张图片的大小相同。我假设问题是一个图像是彩色的,另一个是灰度的。有没有办法使用不同 channel 的图像执行上述过程?

谢谢。

最佳答案

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

最好确认图片大小和 channel 数是否相同,如果相同则cvAdd应该可以正常添加。我建议为 cvAdd 的结果参数设置一个单独的结果 IplImage。

使用 cvSplit 将图像分割成单独的 channel 。

对于 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 );

cvMergecvSplit 相反。

然后,您可以对生成的拆分图像一张一张地调用 cvAdd,并在最后合并结果。

关于c++ - cvSetImageROI 使用灰度和彩色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9753721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com