1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > OpenCV4---像素操作(读写像素 修改像素值)

OpenCV4---像素操作(读写像素 修改像素值)

时间:2019-11-13 13:21:00

相关推荐

OpenCV4---像素操作(读写像素 修改像素值)

四、像素操作(读写像素、修改像素值)

1、遍历图像像素

int height = gray_src.rows;//获取图像行数int width = gray_src.cols;//获取图像列数for (int row = 0; row < height; row++) {//遍历图像各个像素点的像素值for (int col = 0; col < width; col++) {}}

2、获取图像像素值

读一个GRAY像素点的像素值

int gray = image.at<uchar>(row, col);

读一个RGB像素点的像素值

int b = image.at<Vec3b>(row, col)[0];//获取row行col列0通道的像素值,Vec3b可以用来读取三通道的RGB图像像素值int g = image.at<Vec3b>(row, col)[1];//获取row行col列1通道的像素值int r = image.at<Vec3b>(row, col)[2];//获取row行col列2通道的像素值

3、修改像素值

灰度图像image.at<uchar> (row,col) = 目标像素值

RGB三通道图像:

image.at<Vec3b>(row, col)[0] = 目标像素值;//修改row行col列0通道的像素值image.at<Vec3b>(row, col)[1] = 目标像素值;//修改row行col列1通道的像素值image.at<Vec3b>(row, col)[2] = 目标像素值;//修改row行col列2通道的像素值

空间图像赋值image = Scalar(0);

生成灰度图:

gray_src.at<uchar>(row, col) = min(r, min(b,g));//取RGB中的最小值作为灰度值gray_src.at<uchar>(row, col) = max(r, max(b,g));//取RGB中的最大值作为灰度值

4、反转图像色彩

反转灰度图像gray_image.at<uchar>(row, col) = 255 - gray;

反转RGB图像

image.at<Vec3b>(row, col)[0] = 255 - b;//反转row行col列0通道的像素值image.at<Vec3b>(row, col)[1] = 255 - g;//反转row行col列1通道的像素值image.at<Vec3b>(row, col)[2] = 255 - r;//反转row行col列2通道的像素值

利用函数实现图像色彩反转bitwise_not(原图像, 反转后图像);

5、去掉图像某一通道色彩

image.at<Vec3b>(row, col)[0] = b;//保持row行col列0通道的像素值image.at<Vec3b>(row, col)[1] = g;//保持row行col列1通道的像素值image.at<Vec3b>(row, col)[2] = 0;//清零row行col列2通道的像素值

反转图像色彩示例代码:

#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv) {Mat src;src = imread("C:/Users/26839/Pictures/测试.png");if (src.empty()) {cout << "could not load image...\n" << endl;return -1;}imshow("input", src);Mat dst;dst.create(src.size(), src.type());//构造一张与src大小类型一致的图片dstint height = src.rows;int width = src.cols;int nc = src.channels();for (int row = 0; row < height; row++) {//遍历图像各个像素点的像素值for (int col = 0; col < width; col++) {if (nc == 1) {//使单通道图片色彩反转int gray = src.at<uchar>(row, col);//获取像素值dst.at<uchar>(row, col) = 255 - gray;//反转图像} else if (nc == 3) {//使3通道图片色彩反转int r = src.at<Vec3b>(row, col)[0];//获取row行col列0通道的像素值,Vec3b可以用来读取三通道的RGB图像像素值int g = src.at<Vec3b>(row, col)[1];//获取row行col列1通道的像素值int b = src.at<Vec3b>(row, col)[2];//获取row行col列2通道的像素值dst.at<Vec3b>(row, col)[0] = 255 - r;//反转row行col列0通道的像素值dst.at<Vec3b>(row, col)[1] = 255 - g;//反转row行col列1通道的像素值dst.at<Vec3b>(row, col)[2] = 255 - b;//反转row行col列2通道的像素值}}}//bitwise_not(src, dst);//反转图像色彩的函数imshow("invert", dst);waitKey(0);destroyAllWindows();return 0;}

输出运行结果如下所示:

原始图像

反转处理后的图像

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。