Dalam OpenCV, terdapat beberapa cara untuk mengakses dan memanipulasi nilai piksel dalam imej Mat. Satu senario biasa ialah mendapatkan semula nilai saluran piksel tertentu.
Jika imej disimpan dalam format CV_8UC3, yang mewakili imej tiga saluran dengan integer tidak bertanda 8-bit values (BGR), anda boleh menggunakan jenis data Vec3b untuk mengakses saluran individu. Sebagai contoh, jika foo ialah imej Mat jenis ini, anda boleh lelaran ke atas piksel menggunakan kod berikut:
for (int i = 0; i < foo.rows; i++) { for (int j = 0; j < foo.cols; j++) { Vec3b bgrPixel = foo.at<Vec3b>(i, j); // Access the pixel's BGR values... } }
Atas sebab prestasi, anda boleh juga mengakses nilai piksel secara langsung dengan mengakses penimbal data. Ini menyediakan akses yang lebih pantas tetapi memerlukan lebih banyak pengendalian manual penukaran data dan mengimbangi saluran. Berikut ialah contoh cara untuk melakukan ini:
uint8_t* pixelPtr = (uint8_t*)foo.data; int cn = foo.channels(); Scalar_<uint8_t> bgrPixel; for (int i = 0; i < foo.rows; i++) { for (int j = 0; j < foo.cols; j++) { bgrPixel.val[0] = pixelPtr[i*foo.cols*cn + j*cn + 0]; // B bgrPixel.val[1] = pixelPtr[i*foo.cols*cn + j*cn + 1]; // G bgrPixel.val[2] = pixelPtr[i*foo.cols*cn + j*cn + 2]; // R // Access the pixel's BGR values... } }
Sebagai alternatif, anda juga boleh menggunakan kaedah row() untuk mengakses baris individu imej, seperti yang ditunjukkan dalam yang berikut kod:
int cn = foo.channels(); Scalar_<uint8_t> bgrPixel; for (int i = 0; i < foo.rows; i++) { uint8_t* rowPtr = foo.row(i); for (int j = 0; j < foo.cols; j++) { bgrPixel.val[0] = rowPtr[j*cn + 0]; // B bgrPixel.val[1] = rowPtr[j*cn + 1]; // G bgrPixel.val[2] = rowPtr[j*cn + 2]; // R // Access the pixel's BGR values... } }
Ingat bahawa OpenCV menyimpan nilai piksel dalam format BGR (Biru, Hijau, Merah) dan bukannya RGB, jadi anda perlu mengambil kira perkara itu apabila mengakses saluran.
Atas ialah kandungan terperinci Bagaimanakah anda mengakses nilai saluran piksel dalam imej Mat dalam OpenCV?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!