Opencv3 C ++ VS2017スタディノート02マットオブジェクト

  • 研究ノート00および01に関する質問:
    • 次の図に示すように、2つのインタラクティブウィンドウが表示されます。1つは灰色で、もう1つは結果です。
    • 解決策:project-properties-linker-input-additional依存関係を開き、opencvの構成時に追加された依存関係の1つを削除します
    • dst.sizeが間違っています。サイズはオブジェクトdstの属性ではありませんが、メソッド関数dst.size()、同様にdst.type();

 

  • マット
    • Matオブジェクトは、ヘッダーとデータの2つの部分に分かれています。
  • Matオブジェクトの使用(ここにリストされていないいくつかのプログラムもあります)
    • マットコンストラクター
      • マットdst(2,2 CV_8UC3、Scalar(0,0,255));
        • スカラー括弧は、2 * 2行列の各要素の値です。明らかに、4つの要素はここでは同じです。つまり、(0,0,255)です。
      • マットdst(行、列、CV_8UC3、特定のピクセル値);
        • CV_8UC3
          • 8:各チャネルの1ピクセルが8ビットを占有します
          • U:符号なし
          • C:文字タイプ
          • 3:Scalar()のパラメーターの数を決定する3つのチャネル
    • マットコピーの問題
      • 部分コピー:データ部分ではなく、Matのヘッダーとポインター部分のみをコピーします
        • マットA =未読(B);
        • マットC(D);
      • フルコピー
        • Mat F = A.clone(); FはAとともに変化します
        • マットG; A.copyTo(G); AGは互いに干渉しません
    • 小さな配列フィルターを定義する
      • マットフィルター=(Mat_ <double>(3,3)<< 0、-1,0、-1,5、-1,0、-1,0);
        • doubleは行列要素タイプです
      • 昨日から学んだカーネルマトリックスを入手する
    • マトリックスを作成する別の方法
      • マットm = Mat :: zeros(src.size()、src.type());
        • すべて0の行列、srcと同じサイズとタイプ
      • マットm = Mat :: zeros(2,2、CV_8UC1);
        • すべて0行列、2 * 2、CV_8UC1は上記と同じ
/***Mat对象的基本使用方法***/
int main(int argc, char ** argv)
{
    Mat src;
    src = imread("地址");
    if(!src.data)
    {
        cout<<"no data"<<endl;
        return -1;
    }
    namedWindow("src_imgae", WINDOW_AUTOSIZE);
    imshow("src_image", src);
    
    Mat dst;                                //创建一个Mat对象
    dst = Mat(src.size(), src.type());       //初始化一个Mat对象,和src的大小类型都一样
    dst = Scalar(123,12,132);             //赋值, Scalar标量,括号就是RGB的值
    namedWindow("dst_image", WINDOW_AUTOSIZE);
    imshow("dst_image", dst);
    
    Mat dst_clone =src.clone();            //克隆图像会随着源图像改变而改变

    Mat dst_copy;                //复制的图像不会因为源图像的变化而变化
    src.copyTo(dst_copy);
    
    Mat dst_cvt;
    cvtColor(src, dst_cvt, RGB2GRAY);        //改变颜色空间
    cout<<"src' channels: "<<endl;
    cout<<"dst_cvt's channels: "<<endl;
    const uchar* dst_cvt_firstRow = dst_cvt.ptr<uchar>(0);
    cout<<"dst_cvt's firstRow: "<<*dst_cvt_firstRow<<endl;

    int cols = dst.cols;      //宽度
    int rows = dst.rows;       //高度
    
    Mat dst_mat(2,2,CV_8UC3,Scalar(12,122,1));    

    waitKey(0);
    return 0; 

}

 

おすすめ

転載: blog.csdn.net/Mrsherlock_/article/details/104486339