Artikel ini berdasarkan persekitaran Java dan memperkenalkan parameter CvType yang diluluskan semasa mencipta objek Mat dalam OpenCV 4.6.0v.
Jika anda tidak begitu memahami peranan dan maksud parameter seperti CvType.CV_8UCX, CvType.CV_8SCX, CvType.CV_16UCX, CvType.CV_16SCX dsb.
.
Jadi, artikel ini boleh membantu anda memahami peranan saluran dalam OpenCV Mat.
Kandungan berikut adalah berdasarkan OpenCV SDK 4.6.0v
Jenis ini digunakan terutamanya untuk mentakrifkan jenis data dalam Mat. . Senario penggunaan biasa ialah mentakrifkannya semasa mencipta Mat.
Jadi apakah parameter yang ditentukan oleh jenis CvType? Secara ringkasnya, ia menentukan dua penunjuk asas data imej dalam Mat:
Mengenai konsep saluran, saya memperkenalkannya dalam artikel sebelum ini https://zinyan.com/?p=493. Jika anda tidak tahu banyak tentang konsep saluran, anda boleh membaca artikel sebelumnya.
Kita boleh lihat daripada kod sumber CvType bahawa OpenCV telah mentakrifkan 8 parameter kedalaman:
public static final int CV_8U = 0, CV_8S = 1, CV_16U = 2, CV_16S = 3, CV_32S = 4, CV_32F = 5, CV_64F = 6, CV_16F = 7;
Nombor di hadapan 8U, 8S, 16U, 16S, 32S, 64F, 16F, dsb. dalam nama di atas mewakili bilangan bit
Maksudnya: 8bite, 16bite,32bit,64bit. Digunakan untuk menentukan julat nilai, huruf U, S, F berikut mewakili simbol dan ketepatan.
Jadi digabungkan dengan definisi yang kita boleh fahami:
PS: Berkenaan isu ketepatan dan julat nombor titik terapung, anda boleh mencari butiran lanjut. Julat parameter di atas diperoleh melalui ringkasan rangkaian.2.2 SaluranDalam definisi OpenCV, bilangan maksimum saluran ialah 4 dan minimum ialah 1. Ini ditunjukkan dalam kod, iaitu, C1, C2 yang ditakrifkan dalam kelas CvType, C3, C4.
//zinyan:创建了一个4*4尺寸的图片。每个像素点存储了一个double[1]的数组,该数组中值的范围为0~255 Mat mat = new Mat(4, 4, CvType.CV_8UC1); //通常用来表示灰度图或黑白图 //zinyan:创建了一个5*5尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~255 Mat mat1 = new Mat(5, 5, CvType.CV_8UC3); //通常用来表示彩色图 //zinyan:创建了一个6*6尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~65535 Mat mat1 = new Mat(6, 6, CvType.CV_16UC3); //通常用来表示彩色图,颜色值范围更广。
Mat mat = new Mat(4, 4, CvType.CV_8UC3); int depth = CvType.depth(mat.type()); //输出结果值为 0 == CvType.CV_8U Mat mat1 = new Mat(4, 4, CvType.CV_16SC1); depth = CvType.depth(mat1.type()); //输出结果值为 3 == CvType.CV_16S
Mat mat1 = new Mat(4, 4, CvType.CV_16SC1); int channels = CvType.channels(mat1.type());//该值为1
Nilai CvType.CV_USRTYPE1 sudah bersamaan dengan CV_16F. Jadi parameter ini juga ditandakan dengan anotasi @deprecated. Melambangkan bahawa ia telah ditinggalkan
Adalah disyorkan agar anda tidak menggunakannya.
Kaedah lain dalam CvType agak mudah difahami. Akhir sekali, terdapat kaedah public static final int ELEM_SIZE(int type)
Kaedah ini melepasi nilai jenis. Itulah yang dipanggil CvType.CV_8UC1 dan nilai parameter lain.
Kemudian apa yang dikembalikan ialah pembolehubah int.
Pembolehubah yang dikembalikan oleh kaedah ini adalah untuk mewakili bilangan bait parameter dalam setiap saluran. 1 bait mewakili 8 bit, iaitu 8 bit.
Jadi jika kami CV_8U, CV_8S, kami boleh kembalikan nombor saluran terus.
Jika ia adalah data 16-bit, ia perlu mengembalikan 2*saluran, data 32-bit memerlukan 4*saluran dan data 64-bit memerlukan 8*saluran.
Ini menyimpulkan pengenalan kepada CvType dalam OpenCV.
Jika kami menghadapi ralat yang berkaitan dengan CvType semasa penggunaan. Jadi dalam kebanyakan kes ia disebabkan oleh ketidakbiasaan kami dengan CvType.
Atau algoritma yang mempunyai keperluan untuk saluran dan kedalaman digunakan untuk menyebabkan ralat.
Atas ialah kandungan terperinci Fahami maksud pelbagai parameter CvType dalam OpenCV dan kaedah yang berkaitan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!