如何使用 OpenCV 中的直接访问方法更改像素值?
在前面的方法(“at”方法)中,需要在访问像素值时指定图像类型。还有一种方法比“at”方法简单。它称为直接访问方法。要使用此方法访问像素值,则需要指定 Mat 类型,例如Mat<uchar>, Mat<Vec3b>, Mat<Vec2i>等等。
以下程序演示了如何使用 OpenCV 中的直接访问方法更改像素值。
示例
#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;//Declaring cv namespace
using namespace std;
void direct_access(Mat_<Vec3b> &image, int n){ //Declaring the function//
for (int x = 0; x < n; x++){ //initiating a for loop//
int i = rand() % image.cols;//accessing random column//
int j = rand() % image.rows;//accessing random rows//
image(j, i) = 0;//setting the pixel values to zero//
}
}
int main() {
Mat_<Vec3b> image;//taking an image matrix//
Mat unchanged_Image;//taking another image matrix//
image = imread("sky.jpg");//loading an image//
unchanged_Image = imread("sky.jpg");//loading the same image//
namedWindow("Noisy Image");//Declaring an window//
namedWindow("Unchanged Image");//Declaring another window//
direct_access(image, 4000);//calling the direct access function//
imshow("Noisy Image", image);//showing the Noisy image
imshow("Unchanged Image", unchanged_Image);//showing the unchanged image//
waitKey(0);//wait for Keystroke//
return 0;
}输出

广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP