Matrix OpenCV'nin boyutu


128

Bunun çok ilkel olabileceğini biliyorum, ancak OpenCV'de yeniyim. OpenCV'de bir matrisin boyutunu nasıl elde edeceğimi söyler misiniz? Googledim ve hala arıyorum, ancak herhangi biriniz cevabı biliyorsa lütfen bana yardım edin.

Satır ve sütun sayısındaki gibi boyut.

Ve bir 2D matrisin maksimum değerini doğrudan elde etmenin bir yolu var mı?

Yanıtlar:



19

Sıralar ve sütunlardan ayrı olarak bir dizi kanal ve tip olduğunu unutmayın. Hangi tipin olduğu açık olduğunda, kanallar CV_8UC3'teki gibi ekstra bir boyut olarak hareket edebilir, böylece bir matrisi şu şekilde adresleyebilirsiniz:

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

Dolayısıyla, temel türdeki elemanlar açısından boyut M.rows * M.cols * M.cn

Kullanabileceğiniz maksimum öğeyi bulmak için

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

Bu, bir OpenCV Mat'taki en büyük öğeyi bulmayı da ele alan tek yanıttır.
rayryeng

12

2D matris için:

mat.rows - 2B dizideki satır sayısı.

mat.cols - 2B dizideki sütun sayısı.

Veya: C ++: Size Mat :: size () const

Yöntem bir matris boyutu döndürür: Boyut (sütunlar, satırlar). Matris 2 boyutludan büyük olduğunda, döndürülen boyut (-1, -1) olur.

Çok boyutlu matris için kullanmanız gerekir

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;

Burada z ekseni için 2, y ekseni için 3, x ekseni için 4 olduğuna dikkat edin. X, y, z ile boyutların sırası anlamına gelir. x indeksi en hızlı şekilde değişir.


1
sadece açık olmak gerekirse, Mat::size()üye yöntemi yoktur , daha çok Mat::sizetürde bir üye değişkeni vardır MatSize. İkincisi, MatSize::operator()bir Sizenesneyi döndürmek için parantez operatörünü aşırı yükler
Amro

4

Tam bir C ++ kod örneği, yeni başlayanlar için yararlı olabilir

#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
cpp cinsinden matrisin derinliğini nasıl elde ederiz?
sai

1

Python sarmalayıcıları kullanıyorsanız (matris adınızın mat olduğunu varsayarak ):

  • mat.shape size bir tür dizisi verir- [yükseklik, genişlik, kanallar]

  • mat.size size dizinin boyutunu verir

Basit kod:

import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.