매트릭스 OpenCV의 크기


128

나는 이것이 매우 기초적인 것이지만 OpenCV를 처음 사용합니다. OpenCV에서 행렬의 크기를 얻는 방법을 알려주시겠습니까? 나는 구글 검색하고 여전히 검색하지만, 당신 중 누구라도 대답을 알고 있다면, 저를 도와주세요.

행과 열의 수와 같은 크기입니다.

그리고 2D 행렬의 최대 값을 직접 얻는 방법이 있습니까?

답변:



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 매트에서 가장 큰 요소를 찾는 것을 해결하는 유일한 대답입니다.
rayryeng

12

2D 매트릭스의 경우 :

mat.rows – 2D 배열의 행 수입니다.

mat.cols – 2D 배열의 열 수입니다.

또는 : C ++ : Size 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::sizetype 의 멤버 변수 가 없습니다 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에서 행렬의 깊이를 어떻게 얻습니까?
사이

1

파이썬 래퍼를 사용하는 경우 (매트릭스 이름이 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.