Я пытаюсь заставить веб-камеру сфотографировать чье-то лицо в BGR, преобразовать изображение в HSV и проанализировать эти значения HSV, которые впоследствии будут использоваться в алгоритме обнаружения кожи. К сожалению, картина, кажется, анализируется в BGR, даже после того, как я пытаюсь конвертировать ее с помощью cvtColor ().
Я использую код ниже, чтобы проверить, правильно ли я использую цветовое пространство. Обратите внимание на часть, где я пытаюсь установить насыщенность и значение 0:
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);
Это создает абсолютно синее изображение моего лица, поэтому мне кажется, что я редактирую каналы G и R изображения BGR вместо каналов S и V изображения HSV. (Я бы опубликовал изображение, но это мой первый пост, поэтому у меня пока недостаточно репутации.)
Кто-нибудь знает, почему это происходит? Любые мысли приветствуются.
Вы смешиваете стиль C ++ Mat со старым C IplImage *, и это не совсем понятно, что именно происходит. Вот код для поворота inputImage
в HSV:
Mat fullImageHSV;
cvtColor(inputImage, fullImageHSV, CV_BGR2HSV);
Имейте в виду, что значения OpenCV HSV составляют H от 0 до 180, в то время как S и V от 0 до 255, в то время как другие программы, как правило, используют другие значения. Также обратите внимание, что OpenCV не может нормально показывать изображения HSV, это искажает цвет, потому что они интерпретируются как RGB.
Других решений пока нет …