2012-03-17 16 views
0

私は関心のある画像領域を設定し、別の画像に画像を追加しようとしています。 1つのイメージはマスク(グレースケール)で、もう1つはカラーイメージです。私はコードを強化しましたグレースケールとカラー画像を使用する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の反対を行います。

結果の分割イメージに1つずつcvAddを呼び出して、最後に結果をマージすることができます。

関連する問題