【问题标题】:cannot insert struct values to inRange openCV无法将结构值插入到 inRange openCV
【发布时间】:2017-02-20 20:02:15
【问题描述】:

我似乎无法将结构上成员的值插入到 inRange 函数中。程序编译,但阈值没有按预期工作。如果我插入一个不是来自结构的值,它会很好地工作。

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。

【问题讨论】:

    标签: c++ c opencv struct


    【解决方案1】:

    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 vs orange.iHighH = 100iLowV = 0 vs orange.iLowV = 100),因此也可能导致不同的结果。

    【讨论】:

    • 啊,我太愚蠢了,我没有仔细检查。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多