3

クラスを使用して関数を作成しています。関数は、提供された画像から選択された色を見つける必要があります。そこで、私たちが話しているRGB値であるため、関数がVec3b値をとるように作成しました。

class colorcompare
{
private:
int threshold;
Vec3b color;

void setcolor(Vec3b);
Mat process(Mat&);
void setthresh(const int);
int getdist(Vec3b);
};

void colorcompare::setcolor(Vec3b colr)
{
color = colr;
}

int _tmain(int argc, _TCHAR* argv[])
{

colorcompare cc1;
Mat image;

image = imread("c:\\car2.jpg", -1);

cc1.setcolor(19,69,139); //This is where im getting error
cc1.setthresh(100);
namedWindow("meh");

imshow("meh", cc1.process(image));
waitKey(0);



return 0;
}

今私が得ているエラーはこれです:'colorcompare::setcolor' : function does not take 3 arguments

vec3bは3つの値のベクトルであることがわかっているので、言い換えると、vec3bの個々の値にcolor [0]、color [1]、color[2]としてアクセスできます。

そして、私は上記の関数でそのように定義できることを知っていますが、vec3bが3つの値を取ることができるべきではありませんか?私のコードでやったように?

4

2 に答える 2

8

古典的な間違い:関数は3つの変数ではなく、オブジェクトを期待しcv::Vec3bintます。

単一行のソリューションが必要な場合は、次のことを試してください。

cc1.setcolor(cv::Vec3b(19,69,139));
于 2012-10-11T01:26:54.760 に答える
2

Vec3bをパラメーターとして受け取るようにsetColorを定義したので、Vec3bを指定する必要があります。

cv::Vec3b color(19,69,139); // or cv::Vec3b color; color[0]=19, ...
cc1.setColor(color);
于 2012-10-10T09:01:11.927 に答える