SSブログ

cv::Mat での各要素へのアクセス方法 [OpenCV]

CV_GRAY2BGR 形式のcv::Mat データの各要素へのアクセス方法。

画像の最大、最小、平均輝度を求める方法

 

px->data.max    = 0;
px->data.min    = 0xffff;
px->data.ave    = 0;
px->data.count    = 0;

uint64_t    total = 0;

for (int y = 0; y < roi->rows; ++y){
    for (int x = 0; x < roi->cols; ++x) {
        for (int c=0; c<roi->channels(); c++) {
            unsigned short    B = roi->at<cv::Vec3s>(y, x)[0];
            unsigned short    G = roi->at<cv::Vec3s>(y, x)[1];
            unsigned short    R = roi->at<cv::Vec3s>(y, x)[2];
            unsigned int    pixelData = B + G + R;

            if (pixelData > px->data.max) px->data.max = pixelData;
            if (pixelData < px->data.min) px->data.min = pixelData;
            total += pixelData;
            px->data.count++;
        }
    }
}
px->data.ave = (unsigned int)(total / px->data.count);

 

参考サイト


OpenCVとOpenGLの座標系 [OpenCV]

OpenCVは左上原点

OpenGLは一般的な左下原点

OpenCVを一般的な座標で考える場合は、(x,y,z) = (1,-1,-1)をか掛ける。

 

参考サイト


SIFT検出器に基づく特徴点検出概要 [OpenCV]

画像内の強いコーナーを検出します。

◆画像処理効果

処理前

image

処理後

以下のコードを使うと「stack overflow」で停止するので注意が必要です。原因究明はこの処理を使う必要が発生したときに行う。

 

以下に制作したSURF検出器による特徴点検出部のソースを示す。

Detectors.cpp

image

SIFTはノンフリー版なので、この関数を使用するには以下の2点を追加する必要があります。

1.マクロとヘッダーの追加

image_thumb5

2.main関数の最初にcv::initModule_nonfree関数を追加

image_thumb7

 

参考サイト


ROIを利用した画像の部分処理概要 [OpenCV]

ROIとは: 「画像に対して ROI(Region Of Interest)を設定すると,その部分画像が,画像全体と同一に扱われる. つまり,部分画像に対して処理を行う場合,それが部分画像であることを考慮する必要なく扱うことができる. ただし,処理結果として座標や領域を得て,それを再び画像全体に戻す処理 (例えば,画像全体に対して描画するなど)を行う場合は,座標にオフセット (ROIの位置,幅など)を加えるなどの追加処理が必要なので注意すること.」

ROI(Region Of Interest)を利用して部分処理を行う。今回は4分割しそれぞれを回転させた。

◆画像処理効果

処理前

image

処理後

image

以下に制作したTilingクラスのソースを示す。

Tiling.h

image

Tiling.cpp

image

ソースコード

参考サイト


SimpleBlob検出器に基づく特徴点検出概要 [OpenCV]

  1. 適応的閾値処理を行い,入力画像を二値化します.その際に,minThreasholdからmaxThresholdまで,thresholdStepステップで変化させた複数の閾値を利用します.
  2. 各二値画像から,findContours()を用いて連結成分を抽出し,その中心を求めます.
  3. 複数の二値画像の中心点を座標でグループ化します.近い中心同士は1つのblobを形成し,これは minDistBetweenBlobsパラメータで制御されます.
  4. グループの最終的な中心と半径を推定し,それをキーポイントの位置とサイズとして返します.

◆画像処理効果

処理前

image

処理後

image

以下に制作したSimpleBlobアダプタによる特徴点検出部のソースを示す。

Detectors.cpp

image

参考サイト


FAST検出器+Dynamicアダプタに基づく特徴点検出概要 [OpenCV]

特徴点検出において,ある決まった個数範囲の特徴点を求めたい場合に,この方法が役にたちます. 求めたい特徴点個数の 最小値最大値 を指定すると,検出器のパラメータを変更しながら, 指定された 繰り返し数 範囲内で探索を行います.

◆画像処理効果

処理前

image

処理後

image

以下に制作したFAST検出器+Dynamicアダプタによる特徴点検出部のソースを示す。

Detectors.cpp

image

参考サイト


FAST検出器+Pyramidアダプタに基づく特徴点検出概要 [OpenCV]

入力画像からガウシアンピラミッドを作成し,各レベルにおいて特徴点を検出します. 特徴点のスケールを指定できない検出器において役立ちます.

◆画像処理効果

処理前

image

処理後

image

以下に制作したFAST検出器+Pyramidアダプタによる特徴点検出部のソースを示す。

Detectors.cpp

image

参考サイト


FAST検出器+Gridアダプタに基づく特徴点検出概要 [OpenCV]

入力画像をグリッド状に分割し,その中で特徴点を検出します.

◆画像処理効果

処理前

image

処理後

image

以下に制作したFAST検出器+Gridアダプタによる特徴点検出部のソースを示す。

Detectors.cpp

image

参考サイト


ORB検出器に基づく特徴点検出概要 [OpenCV]

画像内の強いコーナーを検出します。

◆画像処理効果

処理前

image

処理後

image

以下に制作したORB検出器による特徴点検出部のソースを示す。

Detectors.cpp

image

 

参考サイト


MSER検出器に基づく特徴点検出概要 [OpenCV]

MSERは本来,領域抽出の手法ですが,OpenCVでは,検出された領域輪郭に楕円をフィッティングさせることで,サイズと方向を考慮する特徴点検出器として利用することもできます.

◆画像処理効果

処理前

image

処理後

image

以下に制作したMSER検出器による特徴点検出部のソースを示す。

Detectors.cpp

image

 

参考サイト


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。