Ukuran dari Matrix OpenCV


128

Saya tahu ini mungkin sangat sederhana, tetapi saya baru di OpenCV. Bisakah Anda memberi tahu saya cara mendapatkan ukuran matriks di OpenCV ?. Saya mencari di Google dan saya masih mencari, tetapi jika ada dari Anda yang tahu jawabannya, tolong bantu saya.

Ukuran seperti dalam jumlah baris dan kolom.

Dan apakah ada cara untuk secara langsung mendapatkan nilai maksimum dari matriks 2D?

Jawaban:



19

Perhatikan bahwa selain baris dan kolom ada sejumlah saluran dan jenis. Ketika sudah jelas apa jenisnya, saluran dapat bertindak sebagai dimensi ekstra seperti pada CV_8UC3 sehingga Anda akan mengatasi matriks sebagai

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

Jadi ukuran dalam hal elemen tipe dasar adalah M.rows * M.cols * M.cn

Untuk menemukan elemen maks yang dapat digunakan

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

Ini adalah satu-satunya jawaban yang juga membahas menemukan elemen terbesar dalam Mat OpenCV.
rayryeng

12

Untuk matriks 2D:

mat.rows - Jumlah baris dalam array 2D.

mat.cols - Jumlah kolom dalam array 2D.

Atau: C ++: Ukuran Mat :: size () const

Metode mengembalikan ukuran matriks: Ukuran (cols, baris). Ketika matriks lebih dari 2 dimensi, ukuran yang dikembalikan adalah (-1, -1).

Untuk matriks multidimensi, Anda perlu menggunakan

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;

Catatan, di sini 2 untuk sumbu z, 3 untuk sumbu y, 4 untuk sumbu x. Dengan x, y, z, itu berarti urutan dimensi. x indeks mengubah tercepat.


1
hanya untuk menjadi jelas, tidak ada Mat::size()metode anggota, melainkan Mat::sizevariabel anggota tipe MatSize. Yang terakhir kelebihan beban operator kurung MatSize::operator()untuk mengembalikan Sizeobjek
Amro

4

Contoh kode C ++ lengkap, mungkin bermanfaat untuk pemula

#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
bagaimana kita mendapatkan kedalaman matriks dalam cpp?
Sai

1

Jika Anda menggunakan pembungkus Python, maka (dengan asumsi nama matriks Anda adalah mat ):

  • mat.shape memberi Anda array tipe- [tinggi, lebar, saluran]

  • mat.size memberi Anda ukuran array

Kode sampel:

import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.