opencv图像操作——at方法使用

阅读: 评论:0

opencv图像操作——at方法使用

opencv图像操作——at方法使用

  1. 图像的读写
  2. 读写像素
  3. 修改像素值

图像的读写

imread 可以指定加载灰度图像或者是RGB图像
imwrite 保存图像文件,类型由扩展名决定

读写像素

1. 读写一个灰度图像(GRAY)像素点的像素值 :Scalar intensity = Mat.at<uchar>(y,x)或者Scalar intensity = Mat.at<uchar>(Point(x,y))2. 都一个RGB像素点的像素值:Vec3f intensity  = Mat.at<Vec3f>(y,x)float blue = intensity.val[0]   //获得蓝色通道的像素值float green = intensity.val[1]   //获得蓝色通道的像素值float red = intensity.val[2]      //获得蓝色通道的像素值整型:int b = srcImage.at<Vec3b>(row, col)[0];  //获取像素值b int g = srcImage.at<Vec3b>(row, col)[1];  //获取像素值gint r = srcImage.at<Vec3b>(row, col)[2];  //获取像素值r

修改像素值

int gray = gray_src.at<uchar>(row,col);    //获取像素值
gray_src.at<uchar>(row,col) = 255-gray; //像素值取反赋值

例子

  • 灰度图像的像素取反操作:
#include<opencv2/opencv.hpp>
#include<iostream>using namespace cv;int main(int argc, char** argv) {Mat srcImage = imread("E:/image/6.jpg");Mat gray_src;if (!srcImage.data) {printf("没有找到图片");return -1;}namedWindow("input image",WINDOW_AUTOSIZE);imshow("input image", srcImage);cvtColor(srcImage, gray_src, COLOR_BGR2GRAY);namedWindow("input gray", WINDOW_AUTOSIZE);imshow("input gray", gray_src);int heigth = ws;int width = ls;for (int row = 0; row < heigth; row++) {for (int col = 0; col < width; col++) {int gray = gray_src.at<uchar>(row,col);    //获取像素值gray_src.at<uchar>(row,col) = 255-gray; //像素值取反赋值}}namedWindow("取反操作",WINDOW_AUTOSIZE);![imshow("取反操作", gray_src);waitKey(0);return 0;
}

效果图:

  • 对彩色像素值进行操作:
#include<opencv2/opencv.hpp>
#include<iostream>using namespace cv;int main(int argc, char** argv) {Mat srcImage = imread("E:/image/6.jpg");if (!srcImage.data) {printf("没有找到图片");return -1;}namedWindow("input image",WINDOW_AUTOSIZE);imshow("input image", srcImage);Mat ate(srcImage.size(), pe());int heigth = ws;int width = ls;int nc = srcImage.channels();for (int row = 0; row < heigth; row++) {for (int col = 0; col < width; col++) {if(nc==1){int gray = srcImage.at<uchar>(row, col);    //获取像素值dst.at<uchar>(row, col) = 255 - gray; //像素值取反赋值}else if (nc == 3) {int b = srcImage.at<Vec3b>(row, col)[0];  //获取像素值b int g = srcImage.at<Vec3b>(row, col)[1];  //获取像素值gint r = srcImage.at<Vec3b>(row, col)[2];  //获取像素值rdst.at<Vec3b>(row, col)[0] = 255 - b;dst.at<Vec3b>(row, col)[1] = 255 - g;dst.at<Vec3b>(row, col)[2] = 255 - r;}}}namedWindow("取反操作",WINDOW_AUTOSIZE);imshow("取反操作", dst);waitKey(0);return 0;
}

效果图:

  • opencv提供的api方法bitwise_not:
#include<opencv2/opencv.hpp>
#include<iostream>using namespace cv;int main(int argc, char** argv) {Mat srcImage = imread("E:/image/6.jpg");if (!srcImage.data) {printf("没有找到图片");return -1;}namedWindow("input image",WINDOW_AUTOSIZE);imshow("input image", srcImage);Mat ate(srcImage.size(), pe());bitwise_not(srcImage, dst);namedWindow("取反操作",WINDOW_AUTOSIZE);imshow("取反操作", dst);waitKey(0);return 0;
}

效果图:

本文发布于:2024-02-01 18:31:49,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170678350938620.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   操作   方法   opencv
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23