Размер матрицы OpenCV
Я знаю, что это может быть очень элементарно, но я новичок в OpenCV. Подскажите, пожалуйста, как получить размер матрицы в OpenCV? Я гуглил и все еще ищу, но если кто-нибудь из вас знает ответ, пожалуйста, помогите мне.
Размер как в количестве строк и столбцов.
И есть ли способ напрямую получить максимальное значение 2D матрицы?
5 ответов
cv:Mat mat;
int rows = mat.rows;
int cols = mat.cols;
cv::Size s = mat.size();
rows = s.height;
cols = s.width;
Обратите внимание, что кроме строк и столбцов есть несколько каналов и типов. Когда становится ясно, что это за тип, каналы могут выступать в качестве дополнительного измерения, как в CV_8UC3, поэтому вы будете обращаться к матрице как
uchar a = M.at<Vec3b>(y, x)[i];
Таким образом, размер в терминах элементов элементарного типа составляет M.rows * M.cols * M.cn
Чтобы найти элемент max можно использовать
Mat src;
double minVal, maxVal;
minMaxLoc(src, &minVal, &maxVal);
Для 2D матрицы:
mat.rows - Количество строк в двумерном массиве.
mat.cols - Количество столбцов в двумерном массиве.
Или: C++: Размер Mat::size() const
Метод возвращает размер матрицы: Размер (столбцы, строки) . Когда матрица является более чем двухмерной, возвращаемый размер равен (-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;
Обратите внимание, здесь 2 для оси z, 3 для оси y, 4 для оси x. Под x, y, z это означает порядок размеров. Индекс х меняется быстрее всего.
Если вы используете python, то (если ваше имя матрицы - mat):mat.shape - выдает массив типа- [высота, ширина, каналы]mat.size - выдает размер массива. Пример кода:
import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size
Полный пример кода 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;
}