【发布时间】:2012-12-11 06:43:12
【问题描述】:
我知道这可能是非常初级的,但我是 OpenCV 的新手。你能告诉我如何在 OpenCV 中获取矩阵的大小吗?我用谷歌搜索,我仍在搜索,但如果你们中的任何人知道答案,请帮助我。
大小为行数和列数。
有没有办法直接获取二维矩阵的最大值?
【问题讨论】:
标签: opencv opencv-mat
我知道这可能是非常初级的,但我是 OpenCV 的新手。你能告诉我如何在 OpenCV 中获取矩阵的大小吗?我用谷歌搜索,我仍在搜索,但如果你们中的任何人知道答案,请帮助我。
大小为行数和列数。
有没有办法直接获取二维矩阵的最大值?
【问题讨论】:
标签: opencv opencv-mat
cv:Mat mat;
int rows = mat.rows;
int cols = mat.cols;
cv::Size s = mat.size();
rows = s.height;
cols = s.width;
【讨论】:
size 列为公共属性,而不是像您这样的函数? docs.opencv.org/4.x/d3/d63/…
请注意,除了行和列之外,还有许多通道和类型。当明确什么类型时,通道可以作为 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);
【讨论】:
对于二维矩阵:
mat.rows – 二维数组中的行数。
mat.cols – 二维数组中的列数。
或者: C++: 大小 Mat::size() 常量
该方法返回一个矩阵大小: Size(cols, rows) 。当矩阵大于二维时,返回大小为(-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 表示维度的顺序。 x 索引变化最快。
【讨论】:
Mat::size() 成员方法,而是Mat::size 类型的MatSize 成员变量。后者重载括号运算符MatSize::operator() 以返回Size 对象
如果您使用的是 Python 包装器,那么(假设您的矩阵名称是 mat):
mat.shape 为您提供类型为 [height, width, channels]
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;
}
【讨论】: