ฉันรู้ว่านี่อาจเป็นพื้นฐาน แต่ฉันใหม่กับ OpenCV คุณช่วยบอกวิธีรับขนาดเมทริกซ์ใน OpenCV ได้ไหม ฉัน googled และฉันยังคงค้นหา แต่ถ้ามีใครรู้คำตอบโปรดช่วยฉัน
ขนาดเท่าจำนวนแถวและคอลัมน์
และมีวิธีในการรับค่าสูงสุดของเมทริกซ์ 2D โดยตรงหรือไม่
ฉันรู้ว่านี่อาจเป็นพื้นฐาน แต่ฉันใหม่กับ OpenCV คุณช่วยบอกวิธีรับขนาดเมทริกซ์ใน OpenCV ได้ไหม ฉัน googled และฉันยังคงค้นหา แต่ถ้ามีใครรู้คำตอบโปรดช่วยฉัน
ขนาดเท่าจำนวนแถวและคอลัมน์
และมีวิธีในการรับค่าสูงสุดของเมทริกซ์ 2D โดยตรงหรือไม่
คำตอบ:
cv:Mat mat;
int rows = mat.rows;
int cols = mat.cols;
cv::Size s = mat.size();
rows = s.height;
cols = s.width;
โปรดทราบด้วยว่า stride> = cols; นี่หมายความว่าขนาดที่แท้จริงของแถวสามารถมากกว่าขนาดองค์ประกอบ x cols สิ่งนี้แตกต่างจากเรื่องของ Mat ต่อเนื่องและเกี่ยวข้องกับการจัดตำแหน่งข้อมูล
โปรดทราบว่านอกเหนือจากแถวและคอลัมน์มีจำนวนช่องและประเภท เมื่อชัดเจนประเภทคือช่องทางสามารถทำหน้าที่เป็นมิติพิเศษเช่นเดียวกับใน 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);
สำหรับเมทริกซ์ 2D:
mat.rows - จำนวนแถวในอาร์เรย์ 2D
mat.cols - จำนวนคอลัมน์ในอาร์เรย์ 2D
หรือ: C ++: Size Mat :: size () const
วิธีการคืนขนาดเมทริกซ์: ขนาด (cols, แถว) เมื่อเมทริกซ์มากกว่า 2 มิติขนาดที่ส่งคืนคือ (-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
วัตถุ
ตัวอย่างรหัส 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;
}
หากคุณใช้ตัวห่องูหลามด้วย (สมมติว่าชื่อเมทริกซ์ของคุณคือแผ่น ):
mat.shapeให้อาเรย์ของประเภท - [ความสูงความกว้างช่อง]
mat.sizeให้ขนาดของอาร์เรย์
รหัสตัวอย่าง:
import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size