2012-12-25 55 views
93

Tôi biết điều này có thể rất thô sơ, nhưng tôi mới sử dụng OpenCV. Bạn có thể vui lòng cho tôi biết làm thế nào để có được kích thước của một ma trận trong OpenCV ?. Tôi googled và tôi vẫn đang tìm kiếm, nhưng nếu có ai biết câu trả lời, hãy giúp tôi.Kích thước của ma trận OpenCV

Kích thước bằng số hàng và cột.

Và có cách nào để lấy trực tiếp giá trị tối đa của ma trận 2D không?

Trả lời

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

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

Liên kết tới tài liệu: http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-size – brotherofken

13

Lưu ý rằng ngoài hàng và cột, có một số kênh và loại. Khi nó là rõ ràng là những gì loại, các kênh có thể hoạt động như thêm một chiều hướng như trong CV_8UC3 do đó bạn sẽ giải quyết một ma trận như

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

Vì vậy, kích thước về các yếu tố của loại tiểu là M.rows * M. cols * M.cn

Để tìm các phần tử tối đa có thể sử dụng

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

Đây là câu trả lời duy nhất cũng đề cập đến việc tìm kiếm phần tử lớn nhất trong Mat OpenCV. – rayryeng

1

Đối với ma trận 2D:

mat.rows - số lượng hàng trong một mảng 2D.

mat.cols - Số cột trong một mảng 2D.

Hoặc: C++: Kích thước Mat :: size() const

Phương pháp này trả về một ma trận kích thước: Kích thước (cols, hàng). Khi ma trận lớn hơn 2 chiều, kích thước trả về là (-1, -1).

Đối với ma trận đa chiều, bạn cần phải sử dụng

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; 

Lưu ý, ở đây 2 cho trục z, 3 cho trục y, 4 cho trục x. Bởi x, y, z, nó có nghĩa là thứ tự của các kích thước. x chỉ số thay đổi nhanh nhất.

3

Một C++ hoàn chỉnh mã ví dụ, có thể hữu ích cho người mới bắt đầu

#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

Nếu bạn đang sử dụng python, sau đó (nếu tên ma trận của bạn là mat): mat.shape - mang đến cho bạn một mảng của các loại- [chiều cao, chiều rộng, các kênh truyền hình] mat.size - mang đến cho bạn kích thước của mảng Mã mẫu:

import cv2 
mat = cv2.imread('sample.png') 
height, width, channel = mat.shape[:3] 
size = mat.size 
+0

Không có câu hỏi nào cho thấy rằng trình bao bọc Python đang được sử dụng. – rayryeng

Các vấn đề liên quan