15

バイナリ イメージ (cv::Mat) 内のゼロ以外のすべてのピクセルの位置を見つけるにはどうすればよいですか? 画像内のすべてのピクセルをスキャンする必要がありますか、または使用できる高レベルの OpenCV 関数はありますか? 出力はポイント (ピクセル位置) のベクトルである必要があります。

たとえば、これは Matlab で次のように簡単に実行できます。

imstats = regionprops(binary_image, 'PixelList');
locations = imstats.PixelList;

または、さらに単純な

[x, y] = find(binary_image);
locations = [x, y];

編集:つまり、cv::Mat のすべての非ゼロ要素の座標を見つける方法は?

4

3 に答える 3

12

@AbidRahmanK で提案されているようcv::findNonZeroに、OpenCV バージョン 2.4.4 には関数があります。使用法:

cv::Mat binaryImage; // input, binary image
cv::Mat locations;   // output, locations of non-zero pixels 
cv::findNonZero(binaryImage, locations);

それは仕事をします。この関数は、OpenCV バージョン 2.4.4 で導入されました (たとえば、バージョン 2.4.2 では使用できません)。また、現在のところfindNonZero、何らかの理由でドキュメントに記載されていません。

于 2013-03-05T22:21:44.323 に答える
4

Pythonでこれをやろうとしている人。numpy 配列を使用することも可能であるため、opencv バージョンをアップグレードする (または文書化されていない関数を使用する) 必要はありません。

mask = np.zeros(imgray.shape,np.uint8)
cv2.drawContours(mask,[cnt],0,255,-1)
pixelpoints = np.transpose(np.nonzero(mask))
#pixelpoints = cv2.findNonZero(mask)

コメント アウトされているのは、代わりに openCV を使用した同じ関数です。詳細については、次を参照してください。

https://github.com/abidrahmank/OpenCV2-Python-Tutorials/blob/master/source/py_tutorials/py_imgproc/py_contours/py_contour_properties/py_contour_properties.rst

于 2013-09-25T01:33:50.027 に答える