2013-11-15 11 views
0

내가 채우기 cv::Mat 거기에 좋은 cv::Mat::setTo 방법이다하지만 난 코드의 그 조각과 같은 효과가없는 이유를 이해하지 못하는 것을 알고을 채우기 위해 다른 방법 :OpenCV의 : 이력서 :: 매트

// build the mat 
m = cv::Mat::zeros(size, CV_8UC3); 
cv::cvtColor(m, m, CV_BGR2BGRA); // add alpha channel 
/////////////////////////////////////////////////////////// this works 
m.setTo(cv::Scalar(0,144,0,55)); 


m = cv::Mat::zeros(size, CV_8UC3); 
cv::cvtColor(m, m, CV_BGR2BGRA); 
/////////////////////////////////////////////////////////// this does NOT work 
m = m + cv::Scalar(0,144,0,55) 


m = cv::Mat::ones(size, CV_8UC3); 
cv::cvtColor(m, m, CV_BGR2BGRA); 
/////////////////////////////////////////////////////////// this does NOT work 
m = m.mul(cv::Scalar(0,144,0,55)); 


m = cv::Mat::zeros(size, CV_8UC3); 
cv::cvtColor(m, m, CV_BGR2BGRA); 
/////////////////////////////////////////////////////////// this works too! 
cv::rectangle(tracks, 
       cv::Rect(0, 0, tracks.cols, tracks.rows), 
       cv::Scalar(0,144,0,55), 
       -1); 

PS : 나는 추측

답변

2

"가 작동하지"는 OpenGL 알파 텍스처로 그 매트를 표시하고있어 출력이 setTo을 사용하는 것과 동일하지 않습니다 것을 의미?

  1. cv::cvtColor로 변환 할 때 당신은 당신이 대신을 만들 때 단지 CV_8UC4를 사용하는 변환 cv::cvtColor을 사용합니까 왜 255
  2. 에 남아있을 것입니다 추가 또는 아무것도를 곱하면, 알파 채널이 255로 초기화된다

    매트?
  3. 다중 채널 초기화에는 cv::Mat::ones을 사용할 수 없습니다. cv::Mat::ones을 사용할 때 첫 번째 채널 만 1로 설정됩니다. cv::Mat(x, y, CV_8UC3, CV_RGB(1,1,1))을 사용하십시오.
+0

위대한, 그것은 완전히 대답! 문서에서 그러한 행동이 있습니까? – nkint

+0

명백하게, 적어도 나는 그것에 관해 아무것도 찾을 수 없다. 알파 채널의 경우 255로 지정하면 (불투명) 색상 공간 변환으로 이미지 모양이 변경되지 않습니다. – littleimp

0

aplha 채널의 경우 CV_8UC3이 아닌 CV_8UC4을 사용해야합니다.

관련 문제