2012-03-17 5 views
0

관심있는 이미지 영역을 설정하고 하나의 이미지를 다른 이미지에 추가하려고합니다. 하나의 이미지는 마스크 (그레이 스케일)이고 다른 하나는 컬러 이미지입니다. 내가 코드를 통해 밟아야그레이 스케일 및 컬러 이미지를 사용하는 cvSetImageROI

OpenCV Error: Assertion failed (src1.size() == src2.size()) in binaryMaskOp,

, 그리고 두 이미지는 같은 크기 : 지금, 나는이 다음과 같은 오류가 발생

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

하고 있어요. 문제는 하나의 이미지가 컬러이고 다른 하나는 그레이 스케일이라고 가정합니다. 다른 채널의 이미지를 사용하여 위의 절차를 수행 할 수 있습니까?

감사합니다.

답변

0

OpenCV 트렁크의 어설 션은 CV_Assert(src1.size == dst.size && src1.channels() == dst.channels());이며 here입니다.

cvAdd 정상적으로 추가 할 수 있어야하는 경우 이미지 크기와 채널 수가 동일한 지 확인하는 것이 가장 좋습니다. 결과 매개 변수에 대한 별도의 결과 IplImage를 cvAdd으로 지정하는 것이 좋습니다.

cvSplit을 사용하여 이미지를 별도의 채널로 분할합니다. 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 들어 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); 

들어

cvSplit의 반대한다.

그러면 결과 분할 이미지에 cvAdd을 하나씩 호출하고 결과를 끝에 병합 할 수 있습니다.