Matrix OpenCVのサイズ


128

これは非常に初歩的なことかもしれませんが、OpenCVは初めてです。OpenCVで行列のサイズを取得する方法を教えてください。私はグーグルで検索を続けていますが、答えを知っている人がいたら助けてください。

行と列の数のサイズ。

また、2Dマトリックスの最大値を直接取得する方法はありますか?

回答:


239
cv:Mat mat;
int rows = mat.rows;
int cols = mat.cols;

cv::Size s = mat.size();
rows = s.height;
cols = s.width;

ストライド> = colsにも注意してください。これは、行の実際のサイズが要素サイズx colsより大きくなる可能性があることを意味します。これは、連続マットの問題とは異なり、データの整列に関連しています。



1
これら2つの正確な同等物はありますか?
カカウエテフリト

19

行と列の他に、いくつかのチャネルとタイプがあることに注意してください。タイプが明確である場合、チャネルはCV_8UC3のように追加の次元として機能できるため、次のようにマトリックスをアドレス指定します

uchar a = M.at<Vec3b>(y, x)[i];

したがって、基本タイプの要素に関するサイズはM.rows * M.cols * M.cnです。

使用できる最大要素を見つけるには

Mat src;
double minVal, maxVal;
minMaxLoc(src, &minVal, &maxVal);

これは、OpenCV Matで最大の要素を見つけることにも取り組む唯一の答えです。
rayryeng 2017年

12

2Dマトリックスの場合:

mat.rows – 2D配列の行数。

mat.cols – 2D配列の列数。

または:C ++:サイズMat :: size()const

このメソッドは、行列のサイズを返します:Size(cols、rows)。行列が2次元を超える場合、返されるサイズは(-1、-1)です。

多次元行列の場合、使用する必要があります

int thisSizes[3] = {2, 3, 4};
cv::Mat mat3D(3, thisSizes, CV_32FC1);
// mat3D.size tells the size of the matrix 
// mat3D.size[0] = 2;
// mat3D.size[1] = 3;
// mat3D.size[2] = 4;

ここで、z軸は2、y軸は3、x軸は4であることに注意してください。x、y、zは、次元の順序を意味します。xインデックスが最も速く変化します。


1
明確にするために、Mat::size()メンバーメソッドはなく、Mat::size型のメンバー変数がありますMatSize。後者は、括弧演算子MatSize::operator()をオーバーロードしてSizeオブジェクトを返す
Amro

4

完全なC ++コードの例は、初心者には役立つかもしれません

#include <iostream>
#include <string>
#include "opencv/highgui.h"

using namespace std;
using namespace cv;

int main()
{
    cv:Mat M(102,201,CV_8UC1);
    int rows = M.rows;
    int cols = M.cols;

    cout<<rows<<" "<<cols<<endl;

    cv::Size sz = M.size();
    rows = sz.height;
    cols = sz.width;

    cout<<rows<<" "<<cols<<endl;
    cout<<sz<<endl;
    return 0;
}

1
cppで行列の深さを取得するにはどうすればよいですか?
sai

1

Pythonラッパーを使用している場合(マトリックス名がmatであると想定):

  • mat.shapeはタイプの配列を提供します-[高さ、幅、チャネル]

  • mat.sizeは配列のサイズを提供します

サンプルコード:

import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.