1

その前にしきい値アルゴリズムを適用したグレースケール画像で、特定のピクセルが黒か白かを判断する必要があります。画像は、基本的に白地に黒の塊になります。

Mat falsetest;

...

cv::cvtColor(detected_edges, falsetest, CV_BGR2GRAY);    
threshold(falsetest, falsetest,128, 255,THRESH_BINARY);

...

printf("x:%d y:%d %d\n",x,y,falsetest.at<uchar>(x,y));

結果は 0 または 255 になると予想していましたが、そうではありません。異なるピクセルの出力は次のようになります。

x:1259 y:175 111
x:1243 y:189 184
x:1229 y:969 203
x:293 y:619 255
x:1123 y:339 183

これを間違った方法で実行しようとしていますか、それともエラーが別の場所にあるように見えますか?

4

3 に答える 3

1

falsetestfloat ではなく、uchar ピクセルが含まれていますか? このような場合、次の方法で値にアクセスする必要がありますfalsetest

falsetest.at<float>(x,y)
于 2012-09-04T13:06:41.100 に答える
0

CVコードは良さそうです。ただし、printf で %d を使用して uchar を表示しています。

%hhd を使用するか、実行します

static_cast<int>(falsetest.at<uchar>(x,y)).
于 2012-09-03T20:20:29.810 に答える
0

私はついに問題が何であるかを理解しました。電話した時そう思った

cv::cvtColor(detected_edges, falsetest, CV_BGR2GRAY); 

すべての行列データが falsetest にコピーされました。しかし、そうではなかったようで、detected_edges の修正を進めたところ、falsetest も汚染されました。マトリックスを複製することで問題が解決しました。

于 2012-09-11T16:57:56.747 に答える