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
Patricia Arquetteasal
2024-11-15 13:04:02862semak imbas

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...
    }
}

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...
    }
}

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...
    }
}

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!

Kenyataan:
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