Computer >> Máy Tính >  >> Lập trình >> C ++

Làm cách nào để lấy giá trị của một pixel cụ thể trong OpenCV bằng C ++?

Để đọc giá trị của một pixel cụ thể, chúng ta có thể sử dụng phương pháp 'tại' hoặc 'truy cập trực tiếp'. Ở đây, chúng ta sẽ tìm hiểu cả hai cách tiếp cận.

Hãy bắt đầu với phương thức 'at'. Chương trình sau đây đọc giá trị pixel nằm ở (10, 29) của hình ảnh RGB.

Ví dụ

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
   Mat image;//taking an image matrix//
   image = imread("sky.jpg");//loading an image//
   int x = image.at<Vec3b>(10, 29)[0];//getting the pixel values//
   int y = image.at<Vec3b>(10, 29)[1];//getting the pixel values//
   int z = image.at<Vec3b>(10, 29)[2];//getting the pixel values//
   cout << "Value of blue channel:" << x << endl;//showing the pixel values//
   cout << "Value of green channel:" << x << endl;//showing the pixel values//
   cout << "Value of red channel:" << x << endl;//showing the pixel values//
   system("pause");//pause the system to visualize the result//
   return 0;
}

Đầu ra

Làm cách nào để lấy giá trị của một pixel cụ thể trong OpenCV bằng C ++?

Kết quả của chương trình sẽ hiển thị trong cửa sổ giao diện điều khiển. Ở đây bằng cách sử dụng ba dòng sau, chúng tôi đang nhận các giá trị dạng pixel của ba kênh khác nhau.

int x = image.at<Vec3b>(10, 29)[0];
int y = image.at<Vec3b>(10, 29)[1];
int z = image.at<Vec3b>(10, 29)[2];

Trong dòng đầu tiên, chúng tôi đọc giá trị của pixel nằm ở (10, 29) của kênh đầu tiên (màu xanh lam) và lưu trữ giá trị tại biến 'x'. Dòng thứ hai và thứ ba đang lưu trữ giá trị của 2 nd và 3 rd kênh, tương ứng. Bây giờ chúng ta hãy tìm hiểu cách đọc giá trị pixel bằng phương pháp 'truy cập trực tiếp'.

Chương trình sau đây đọc trực tiếp giá trị pixel nằm ở (10, 29) -

Ví dụ

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
   Mat_<Vec3b>image;//taking an image matrix//
   image = imread("sky.jpg");//loading an image//
   Vec3b x = image(10, 29);//getting the pixel values//
   cout << x << endl;//showing the pixel values//  
   system("pause");//pause the system to visualize the result//
   return 0;
}

Đầu ra

Làm cách nào để lấy giá trị của một pixel cụ thể trong OpenCV bằng C ++?