Trong phương pháp 'at', chúng ta cần chỉ định kiểu ảnh khi truy cập giá trị pixel. Có một phương pháp đơn giản hơn gọi là phương pháp truy cập trực tiếp. Để truy cập giá trị pixel bằng phương pháp này, chúng ta cần chỉ định kiểu Mat như Mat<uchar>, Mat<Vec3b>, Mat<Vec2i>, v.v.
Chương trình sau minh họa cách thay đổi giá trị pixel bằng phương pháp Truy cập Trực tiếp trong OpenCV.
Ví dụ
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
void direct_access(Mat_<Vec3b> &image, int n) {
for (int x = 0; x < n; x++) {
int i = rand() % image.cols;
int j = rand() % image.rows;
image(j, i) = 0;
}
}
int main() {
Mat_<Vec3b> image;
Mat unchanged_Image;
image = imread("sky.jpg");
unchanged_Image = imread("sky.jpg");
namedWindow("Noisy Image");
namedWindow("Unchanged Image");
direct_access(image, 4000);
imshow("Noisy Image", image);
imshow("Unchanged Image", unchanged_Image);
waitKey(0);
return 0;
}
Kết quả
