Mengakses Nilai Piksel dalam Matriks OpenCV
Mendapatkan nilai piksel daripada imej OpenCV Mat boleh dilakukan melalui pelbagai kaedah berdasarkan struktur data digunakan untuk mewakili piksel.
Dengan mengandaikan imej jenis CV_8UC3, di mana setiap piksel diwakili oleh tiga saluran tidak ditandatangani 8-bit (BGR), mendapatkan semula nilai piksel tertentu boleh dicapai seperti 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 and manipulate BGR values... } }
Vec3b ialah bekas untuk vektor 3 elemen, di mana setiap elemen sepadan dengan B, G , dan nilai saluran R.
Mengoptimumkan Prestasi
Untuk meningkatkan prestasi, akses terus kepada penimbal data boleh digunakan:
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 // Process BGR values... } }
Sebagai alternatif, kaedah row() boleh digunakan untuk mengakses baris individu:
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 // Process BGR values... } }
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mengakses Nilai Piksel dalam Matriks OpenCV?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!