2011-10-11 6 views
3

3 채널 IplImage가 있습니다. 4 채널 이미지를 만들고 반투명하게 만들기 위해 1.0 이하의 값으로 알파 채널을 설정하고 싶습니다.openCV : IplImage에 투명도 추가하기

먼저 I는 0.5 알파 채널 (4 번째 채널)을 설정 한 다음은

cvSet(Image_c4, cvScalar(0,0,0,0.5); 

제가 4 채널 영상에 3 채널 이미지를 복사하는 데 사용되는 명령이다.

cvCvtColor(Image_c3, Image_c4, CV_RGB2RGBA); 

문제 : Image_c3은 색상이 있습니다. Image_c4는 Image_c3의 그레이 스케일 복사본이됩니다 (투명도 없음).

업데이트 : 위의 코드는 실제로 정확하고 작동하며 실제로는 아래 해결책의 제안 된 솔루션보다 간결합니다. 나는 다른 곳에서 관련없는 버그를 겪었다.

답변

5

아마 다른 방법이 있지만이 같은 투명성을 추가 응답 시간을내어

// BGR split 
cvSplit(im1_bgr, im1_b, im1_g, im1_r, NULL); 

// Alpha channel creation (transparency) 
IplImage *im1_a = cvCreateImage(cvGetSize(im1_bgr), 8, 1); 
// Set the alpha value 
cvSet(im1_a, cvScalar(128), NULL); 

// Merge the 4 channel to an BGRA image 
IplImage *im1_bgra = cvCreateImage(cvGetSize(im1_bgr), 8, 4); 
cvMerge(im1_b, im1_g, im1_r, im1_a, im1_bgra); 
+1

감사합니다. 내 질문에있는 코드가 실제로 정확하고 다른 관련이없는 버그가 있음이 드러났습니다. 코드도 정확하지만 cvCvtColor는 똑같은 일을하지만 훨씬 간단합니다. – RawMean

0
//This code help to make a transparency image But it take src image as one //single color background see![Removing background and added black background color ][1] 
Mat dst;//(src.rows,src.cols,CV_8UC4); 
Mat tmp,alpha; 

cvtColor(src,tmp,CV_BGR2GRAY); 
threshold(tmp,alpha,0,255,THRESH_BINARY); 

Mat rgb[3]; 
split(src,rgb); 

Mat rgba[4]={rgb[0],rgb[1],rgb[2],alpha}; 
merge(rgba,4,dst); 
imwrite("dst.png",dst); 
//dst is transparency image see here![output image as transparency image][2] 


    [1]: http://i.stack.imgur.com/9THqs.png 
    [2]: http://i.stack.imgur.com/mpmgy.png