2016-10-12 4 views
0

Я не могу вставить значение элемента в struct в функцию inRange. Программа компилируется, но порог не работает, как полагают. Если я вставляю значение не из структуры, он работает хорошо.не может вставить значения struct в inRange openCV

struct objects{ 
    int iLowH; 
    int iHighH; 

    int iLowS; 
    int iHighS; 

    int iLowV; 
    int iHighV; 

    Point coordinate; 
}; 


int iLowH = 0; 
int iHighH = 30; 

int iLowS = 182; 
int iHighS = 255; 

int iLowV = 0; 
int iHighV = 255; 

int refArea=10000; 

orange.iLowH = 0; 
orange.iHighH = 100; 
orange.iLowS = 182; 
orange.iHighS = 255; 
orange.iLowV = 100; 
orange.iLowH = 255; 

inRange(hsvImage, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), threshold); 

imshow("hsv",threshold); 

Это хорошо работает

struct objects{ 
    int iLowH; 
    int iHighH; 

    int iLowS; 
    int iHighS; 

    int iLowV; 
    int iHighV; 

    Point coordinate; 
}; 


int iLowH = 0; 
int iHighH = 30; 

int iLowS = 182; 
int iHighS = 255; 

int iLowV = 0; 
int iHighV = 255; 

int refArea=10000; 

orange.iLowH = 0; 
orange.iHighH = 100; 
orange.iLowS = 182; 
orange.iHighS = 255; 
orange.iLowV = 100; 
orange.iLowH = 255; 

inRange(hsvImage, Scalar(orange.iLowH, orange.iLowS, orange.iLowV), Scalar(orange.iHighH, orange.iHighS, orange.iHighV), threshold); 

imshow("hsv",threshold); 

это не работает. Порог изображения только черный. если я изменю значение iLowH = orange.iLowH и т. д., он тоже не будет работать. если я изменю один из них, это тоже не сработает. Если я напечатаю значение оранжевого цвета, он отобразит правильные значения, и если я напечатаю тип данных оранжевого цвета, он отобразит int для каждого из них.

ответ

0

orange.iHighV не инициализирован. В коде:

orange.iLowH = 0; 
orange.iHighH = 100; 
orange.iLowS = 182; 
orange.iHighS = 255; 
orange.iLowV = 100; 
orange.iLowH = 255; 
//  ^^ overwrites previous value 0, should probably be iHighV instead. 

Фактические пороговые значения различаются между двумя версиями (iHighH = 30 против orange.iHighH = 100 и iLowV = 0 против orange.iLowV = 100), так что может привести к различным результатам.

+0

Ahh глупо от меня, я не проверял дважды. спасибо многому человеку! – Andira

Смежные вопросы