Saya agak bingung dengan type()
metode Mat
objek di OpenCV.
Jika saya memiliki baris berikut:
mat = imread("C:\someimage.jpg");
type = mat.type();
dan type = 16
. Bagaimana cara mengetahui jenis matriks mat ?.
Saya mencoba menemukan jawabannya di manualnya atau di beberapa buku dengan sia-sia.
opencv
opencv-mat
Tae-Sung Shin
sumber
sumber
depth()
danchannels()
, daripada menggunakantype()
yang mengembalikan campuran kompleks antara tipe data dan jumlah saluran.depth()
kode - kode umum , yang jauh lebih sulit untuk itutype()
.Jawaban:
Berikut adalah fungsi praktis yang dapat Anda gunakan untuk membantu mengidentifikasi matriks terbuka Anda pada waktu proses. Saya merasa berguna untuk debugging, setidaknya.
Jika
M
sebuah var tipeMat
Anda dapat menyebutnya seperti ini:Akan mengeluarkan data seperti:
Perlu dicatat bahwa ada juga metode Matrix
Mat::depth()
danMat::channels()
. Fungsi ini hanyalah cara praktis untuk mendapatkan interpretasi yang dapat dibaca manusia dari kombinasi dua nilai yang semua bitnya disimpan dalam nilai yang sama.sumber
depth
danchans
Anda bisa menggunakan makroCV_MAT_DEPTH(type)
danCV_MAT_CN(type)
, masing-masing. Jenisnya juga harusint
, yang memungkinkan Anda untuk menggunakan,to_string(chans)
bukanchans+'0'
.Untuk keperluan debugging jika Anda ingin mencari Mat :: type mentah di debugger:
Jadi misalnya jika type = 30 maka tipe data OpenCV adalah CV_64FC4. Jika tipe = 50 maka tipe data OpenCV adalah CV_16UC (7).
sumber
Dalam OpenCV header " types_c.h " ada satu set definisi yang menghasilkan ini, formatnya adalah
CV_bits{U|S|F}C<number_of_channels>
Jadi misalnya
CV_8UC3
berarti karakter unsigned 8 bit, 3 saluran warna - masing-masing nama ini dipetakan ke integer sewenang-wenang dengan makro di file itu.Edit: Lihat " types_c.h " misalnya:
Jadi,
CV_8UC3 = 16
tetapi Anda tidak seharusnya menggunakan nomor ini, cukup periksatype() == CV_8UC3
apakah Anda perlu tahu apa jenis array OpenCV internal itu.Ingat OpenCV akan mengonversi jpeg menjadi BGR (atau skala abu-abu jika Anda meneruskan '0' ke
imread
) - jadi itu tidak memberi tahu Anda apa pun tentang file aslinya.sumber
types_c.h
terletak di modul inti, misalnya jika Anda menginstal OpenCV langsung di drive C di folder opencv_2.4.11 file header akan berada di C: \ opencv_2.4.11 \ build \ include \ opencv2 \ core \ types_c .hcv::CV_8U
klik kanan dan memilihGo to Definition
untuk membuka file di manacv::CV_8U
ditentukantypes_c.h
.Saya selalu menggunakan link ini untuk melihat jenis nomor yang saya dapatkan dengan
type()
:DAFTAR JENIS MAT DI OPENCV
Saya harap ini dapat membantu Anda.
sumber
Saya telah menambahkan beberapa kegunaan ke fungsi dari jawaban oleh @Octopus, untuk tujuan debugging.
sumber
Ini dijawab oleh beberapa orang lain tetapi saya menemukan solusi yang bekerja sangat baik untuk saya.
sumber