-3

みなさん、こんにちは。画像のすべてのピクセルのグレー値を取得しようとしています。グレー値とは、画像の白または黒レベルです。たとえば、白の場合は0、黒の場合は1とします。この画像の例については

ここに画像の説明を入力してください

私が欲しい値は次のようになります

 0 0 0 0 0 0
 0 1 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 0 0 0 0

これは可能ですか?はいの場合、CのOpenCVでそれを行う方法は?または、OpenCVで不可能な場合、これを実行できる他のライブラリはありますか?

4

1 に答える 1

3

あなたが尋ねることは確かに可能ですが、それがどのように行われるかは多くのことに依存します。C ++を使用する場合、SOでは通常、C ++インターフェイスを使用することを期待しています。つまり、cv::Matオブジェクトがあり、次のような画像をロードします。(名前空間cvを使用)

#include <opencv2/core/core.hpp>
Mat mat_gray = imread(path, CV_LOAD_IMAGE_GRAYSCALE);

またはによって

Mat mat = imread(path); // and assuming it was originally a color image...
Mat mat_gray;
cvtColor(mat, mat_gray, CV_BGR2GRAY); //...convert it to grayscale.

ここで、ピクセル値に1つずつアクセスしたい場合は、を使用します_Tp& mat.at<_Tp>(int x,int y);。あれは:

for(int x=0; x<mat_gray.rows; ++x)
  for(int y=0; y<mat_gray.cols; ++y)
    mat_gray.at<uchar>(x,y); // if mat.type == CV_8U

ここでタイプを検索できます。mat.typeがCV_8U以外の場合は、ucharの代わりに使用する必要があります。

純粋なCインターフェースについては、この回答を確認できます。ただし、C ++を使用する場合は、必ずC++インターフェイスを使用する必要があります。

于 2012-12-02T13:22:41.163 に答える