Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh mengakses nilai saluran piksel tertentu dalam imej OpenCV Mat?

Bagaimanakah saya boleh mengakses nilai saluran piksel tertentu dalam imej OpenCV Mat?

Patricia Arquette
Lepaskan: 2024-11-15 13:04:02
asal
854 orang telah melayarinya

How do I access the channel value of a specific pixel in an OpenCV Mat image?

Cara Mendapatkan Nilai Saluran Pixel daripada Imej Mat dalam OpenCV

Apabila bekerja dengan OpenCV, mengakses nilai saluran piksel tertentu boleh menjadi penting untuk tugas pemprosesan imej . Artikel ini menangani soalan biasa: "Bagaimanakah saya boleh mendapatkan nilai saluran untuk piksel tertentu?"

Dengan mengandaikan imej yang diwakili oleh Mat objek foo berada dalam 8-bit yang biasa digunakan setiap saluran (CV_8UC3), untuk mendapatkan nilai saluran memerlukan perkara berikut langkah:

for(int i = 0; i < foo.rows; i++)
{
    for(int j = 0; j < foo.cols; j++)
    {
        Vec3b bgrPixel = foo.at<Vec3b>(i, j);

        // Process B, G, and R values here...
    }
}
Salin selepas log masuk

Dalam kod ini, Vec3b mewakili vektor 3 saluran di mana setiap saluran sepadan dengan nilai Biru, Hijau dan Merah (BGR).

Pengoptimuman Prestasi:

Atas sebab prestasi, akses terus kepada penimbal data mungkin diutamakan:

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 B, G, and R values here...
    }
}
Salin selepas log masuk

Sebagai alternatif, akses berasaskan baris boleh digunakan:

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 B, G, and R values here...
    }
}
Salin selepas log masuk

Dengan mengikuti kaedah ini, anda boleh mendapatkan semula nilai saluran piksel individu untuk pelbagai pemprosesan imej dengan cekap. tugasan dalam OpenCV.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses nilai saluran piksel tertentu dalam imej OpenCV Mat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan