OpenCV преобразование изображения из RGB в HSV порог боли - PullRequest
0 голосов
/ 11 июня 2010

Вот мой код.Когда я выполню это.Дано любое произвольное изображение.Это всегда дает результат в виде полностью черного или полностью белого изображения.Есть ли проблемы с итерацией?

    int main(void) 
{

int i=0,j=0,height=0,width=0,step=0,k=0;
Mat img_hsv,img_rgb,red_blob,blue_blob;
//reading image... rgb format(default)... CV_8U3C
img_rgb = imread("pic.png",1);
//converting rgb image to hsv format for applying further operations
cvtColor(img_rgb,img_hsv,CV_BGR2HSV);
//defining the various component values or rather the pointer to those 
//components of HSV format... hue, sat and value
uchar img_h=*(img_hsv.data+i*img_hsv.step+j*img_hsv.elemSize());
uchar img_s=*(img_hsv.data+i*img_hsv.step+j*img_hsv.elemSize()+1);
uchar img_v=*(img_hsv.data+i*img_hsv.step+j*img_hsv.elemSize()+2);
//naming window to be displayed
//for(i=0;i<1000;i++){j=i;cout<<img_h;if(img_h==170)cout<<"yesss";}
namedWindow("win1", CV_WINDOW_AUTOSIZE);
Mat img_bw(img_hsv.rows,img_hsv.cols,CV_8U);
imshow("win1", img_hsv);
//applying threshold and hence applying conversions
//by iterating over the entire image//
for(i=0;i<img_hsv.rows;i++){
    for(j=0;j<img_hsv.cols;j++){
    if((img_h>120)) && (img_s>150 || img_s<25) && (img_v>150))
         *(img_bw.data+i*img_bw.step+j*img_bw.elemSize())=255;
    else *(img_bw.data+i*img_bw.step+j*img_bw.elemSize())=0;
    }
}
imshow("win1", img_bw);

Спасибо за ответ заранее !!!

1 Ответ

1 голос
/ 11 июня 2010

Полагаю, я уже ответил на вопрос в своем предыдущем комментарии, а теперь думаю об этом.Более конкретно,

uchar img_h=*(img_hsv.data+i*img_hsv.step+j*img_hsv.elemSize());

дает вам пиксель в точке (i, j), а (i, j) инициализируется значением (0,0).Таким образом, вы получаете полностью черное изображение, если первый пиксель в точке (0,0) падает ниже вашего порога, а белое изображение в противном случае.Скорее всего, вы захотите пересчитывать img_h, img_s и img_v в каждой итерации.

В pre-cv2.x был макрос для доступа к пикселям как CV_IMAGE_ELEM, пожалуйста, прочитайте руководство по замене.Не должно ли быть что-то вроде img_hsv (i, j) сейчас?

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