나는 이것이 매우 기초적인 것이지만 OpenCV를 처음 사용합니다. OpenCV에서 행렬의 크기를 얻는 방법을 알려주시겠습니까? 나는 구글 검색하고 여전히 검색하지만, 당신 중 누구라도 대답을 알고 있다면, 저를 도와주세요.
행과 열의 수와 같은 크기입니다.
그리고 2D 행렬의 최대 값을 직접 얻는 방법이 있습니까?
답변
cv:Mat mat;
int rows = mat.rows;
int cols = mat.cols;
cv::Size s = mat.size();
rows = s.height;
cols = s.width;
또한 stride> = cols; 이것은 행의 실제 크기가 요소 크기 x col보다 클 수 있음을 의미합니다. 이는 연속 매트 문제와 다르며 데이터 정렬과 관련이 있습니다.
답변
행과 열 외에도 여러 채널과 유형이 있습니다. 어떤 유형인지 확실하면 채널은 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);
답변
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 인덱스가 가장 빠르게 변경됩니다.
답변
완전한 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;
}
답변
파이썬 래퍼를 사용하는 경우 (매트릭스 이름이 mat 라고 가정 ) :
-
mat.shape 는 [높이, 너비, 채널] 유형의 배열을 제공합니다
-
mat.size 는 배열의 크기를 제공합니다
샘플 코드 :
import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size