不能向inRange openCV插入结构体值

cannot insert struct values to inRange openCV

本文关键字:结构体 插入 openCV inRange 不能      更新时间:2023-10-16

我似乎无法将结构体上的成员值插入到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的值。等等,它也不会起作用。如果我改变其中一个,它也不会工作。如果我打印橙色的值,它会显示正确的值,如果我打印橙色的数据类型,它会为每个值显示int。

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