에서 bgr을 hsv로 변환합니다. 웹캠에서 BGR의 다른 사람의 얼굴 사진을 찍고 그림을 HSV로 변환하고 나중에 피부 검색 알고리즘에서 사용할 HSV 값을 분석하려고합니다. 불행하게도, 그림은 cvtColor()를 사용하여 변환하려고 시도한 후에도 BGR에서 분석되는 것처럼 보입니다.opencv, C++
아래 코드를 사용하여 올바른 색 공간을 사용하는지 테스트합니다. 그것은 내가 BGR 이미지의 G 및 R 채널을 편집하고있어 좋아하는 것 같다, 그래서 대신에,이 내 얼굴 완전히 파란색 사진을 생산
Mat faceROI = findFace(first); //basic Mat, region of interest for face (code not included)
Mat temp;
faceROI.convertTo(temp, CV_8UC3); //making sure this has right no. of channels and such
CvScalar s;
IplImage face_ipl = temp; //new header
IplImage* aNew = cvCreateImage(cvGetSize(&face_ipl), face_ipl.depth, 3);
cvCvtColor(&face_ipl, aNew, CV_BGR2HSV);
for(int x = 0; x < faceROI.cols; x++){
for (int y = 0; y < faceROI.rows; y++){
s = cvGet2D(aNew, x, y);
//vvvvvvvvvvv
s.val[1] = 0; //should be saturation
s.val[2] = 0; //should be value
//^^^^^^^^^^^
cvSet2D(aNew, x, y, s);
}
}
Mat again(aNew); //<--- is this where something is set back to BGR?
imshow("white", again);
cvReleaseImage(&aNew);
: 나는 0으로 채도 값을 설정하려고 부분을 참고 HSV 이미지의 S 및 V 채널 (나는 이미지를 게시 하겠지만 이것은 아직 첫 평판이므로 아직 충분한 평판이 없다.)
왜 이런 일이 일어나는 지 아는 사람이 있습니까? 모든 생각을 인정합니다.
그럼 이미지를 HSV에서 BGR로 다시 변환 하시겠습니까? – sgarizvi
그게 내 질문의 핵심이야 ... 나는 내가 BGR로 다시 전환한다고 생각하지 않지만 그 결과가 그 일이 무엇인지를 나타내는 것처럼 보인다. – Connor
이미지에 어떤 색 공간이 있더라도'imshow' 함수는 이미지를 항상 간단한 RGB 또는 BGR 이미지로 해석합니다. S 및 V 채널에 '0'을 지정하면 B 채널 이미지에 B에 해당하는 H 채널 만 남아 있습니다. 그래서'imshow'의 경우'again'은 파란색 채널에서만 값을 갖는 BGR 이미지입니다. 그래서 당신은 파란 결과를보고 있습니다. – sgarizvi