Сегментирование и маскирование всех оттенков красного с изображения с помощью opencv - PullRequest
0 голосов
/ 12 января 2011

Я пытаюсь сегментировать все оттенки красного цвета с использованием значений насыщенности оттенка и использую функцию InRangeS, чтобы создать маску, в которой все красные области должны быть побелены, а все остальные - черными (новое изображение с 1 каналом).Thwn Inpaint их, чтобы скрыть сегментированные части.Мой код как дано.Однако я не могу получить выходное изображение, оно не сегментирует желаемый диапазон цветов.

Любые указатели на моем подходе и почему это не работает.?


int main(){
IplImage *img1=cvLoadImage("/home/techrascal/projects/test1/image2.jpeg");
//IplImage *img3;
IplImage *imghsv;
IplImage *img4;
CvSize sz=cvGetSize(img1);

imghsv=cvCreateImage(sz,IPL_DEPTH_8U,3);
img4=cvCreateImage(sz,IPL_DEPTH_8U,1);
int width = img1->width;
int height = img1->height;
int bpp = img1->nChannels;
//int w=img4->width;
//int h=img4->height;
//int bn=img4->nChannels;
cvNamedWindow("original", 1);
cvNamedWindow("hsv",1);
cvNamedWindow("Blurred",1);
int r,g,b;




// create inpaint mask: img 4 will behave as mask
cvCvtColor(img1,imghsv,CV_BGR2HSV);
CvScalar  hsv_min = cvScalar(0, 0, 0, 0);
CvScalar  hsv_max = cvScalar(255, 0, 0, 0);
//cvShowImage("hsv",imghsv);
cvInRangeS( imghsv, hsv_min, hsv_max, img4 );
cvInpaint(img1, img4, img1, 3,CV_INPAINT_NS );
cvShowImage("Blurred",img1);
    cvReleaseImage(&img1);
    cvReleaseImage(&imghsv);
cvReleaseImage(&img4);
//cvReleaseImage(&img3);
char d=cvWaitKey(10000);
cvDestroyAllWindows();

    return 0;}

1 Ответ

0 голосов
/ 12 января 2011

Ваша логика кода кажется правильной, но вам определенно потребуется скорректировать значения диапазона hsv (hsv_min и hsv_max).

Прочтите это подробное руководство, которое покажет вам диапазон hsv, определенный в opencv http://www.shervinemami.co.cc/colorConversion.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...