读写图像

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

读写像素

  • 读一个GRAY像素点的像素值(CV_8UC1)
    Scalar intensity = img.at(y, x);
    或者 Scalar intensity = img.at(Point(x, y));

  • 读一个RGB像素点的像素值
    Vec3f intensity = img.at(y, x);
    float blue = intensity.val[0];
    float green = intensity.val[1];
    float red = intensity.val[2];

修改像素值

  • 灰度图像
    img.at(y, x) = 128;

  • RGB三通道图像
    img.at< Vec3b>(y,x)[0]=128; // blue
    img.at< Vec3b>(y,x)[1]=128; // green
    img.at< Vec3b>(y,x)[2]=128; // red

  • 空白图像赋值
    img = Scalar(0);

  • ROI选择
    Rect r(10, 10, 100, 100);
    Mat smallImg = img®;

  • Vec3b与Vec3F
    Vec3b对应三通道的顺序是blue、green、red的uchar类型数据。
    Vec3f对应三通道的float类型数据
    把CV_8UC1转换到CV32F1实现如下:src.convertTo(dst, CV_32F);

上述代码案例
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>using namespace std;
using namespace cv;int main(int argc,char** argv){Mat src=imread("E:/Experiment/OpenCV/Pictures/dog2.jpg");if(!src.data){cout<<"Could not load Image ..."<<endl;return -1;}imshow("input",src);Mat gray_src;cvtColor(src,gray_src,CV_RGB2GRAY);//转化成灰度图像imshow("gary_src",gray_src);//单通道图像处理int height=gray_src.rows;int width=gray_src.cols;for (int row = 0; row < height; row++){for (int col = 0; col < width; col++){int gary=gray_src.at<uchar>(row,col);//读取图像中 row,col 位置的像素(颜色数据由单通道组成),所以<>中用uchar,只返回的是一个uchar值gray_src.at<uchar>(row,col)=255-gary;//颜色值取反,255-原来的值。即:越黑的地方越白;越白的地方越黑}}imshow("gary_src_changed",gray_src);//多通道图像处理Mat dst;dst.create(src.size(),src.type());height=src.rows;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 gary=gray_src.at<uchar>(row,col);gray_src.at<uchar>(row,col)=255-gary;}else if(nc==3){//颜色值取反,若分别将 b g r 通道颜色设为0,图片整体颜色为 偏黄、偏绯红、偏青色int b = src.at<Vec3b>(row,col)[0];int g = src.at<Vec3b>(row,col)[1];int r = src.at<Vec3b>(row,col)[2];dst.at<Vec3b>(row,col)[0] = 255 - b;dst.at<Vec3b>(row,col)[1] = 255 - g;dst.at<Vec3b>(row,col)[2] = 255 - r;}}}imshow("src_changed",dst);Mat dst2;bitwise_not(src, dst2);//bitwise_not()颜色值取反,同上面算法一致,这个是通过位操作 与或非 实现的imshow("src_changed2",dst2);//其他操作(处理灰度图像的其他方式)Mat dst3,dst4,dst5;dst3.create(src.size(),src.type());//初始化图像cvtColor(src,dst4,CV_RGB2GRAY);//将其变为单通道图像,否则图像宽度只有原图像的3分之一,也可以写成下面这种方式dst5.create(src.size(),CV_8UC1);//或者直接定义成:Mat dst5(src.size(),CV_8UC1);height=src.rows;width=src.cols;nc=src.channels();for (int row = 0; row < height; row++){for (int col = 0; col < width; col++){if(nc==1){int gary=gray_src.at<uchar>(row,col);gray_src.at<uchar>(row,col)=255-gary;}else if(nc==3){//颜色值取反,若分别将 b g r 通道颜色设为0,图片整体颜色为 偏黄、偏绯红、偏青色int b = src.at<Vec3b>(row,col)[0];int g = src.at<Vec3b>(row,col)[1];int r = src.at<Vec3b>(row,col)[2];dst3.at<Vec3b>(row,col)[0] = b;dst3.at<Vec3b>(row,col)[1] = 0;//将 g 的值全部变为0dst3.at<Vec3b>(row,col)[2] = r;dst4.at<uchar>(row,col) = max(r, max(b, g));//随意设置的灰度图,取max图像会比取min亮dst5.at<uchar>(row,col) = min(r, min(b, g));}}}imshow("change b=0",dst3);imshow("gray_src->max(b,g,r)",dst4);imshow("gray_src->min(b,g,r)",dst5);waitKey(0);return 0;
}
运行截图

OpenCV-图像处理(04、图像操作)相关推荐

  1. Java OpenCV 图像处理04.0 图像形状与文字绘制

    Java OpenCV 图像处理04.0 图像形状与文字绘制 Github 代碼地址 OpenCV 仿射变换.透视变换.旋转.平移.缩放 序號 名稱 方法 1 圖像 添加文字 Imgproc.putT ...

  2. OpenCv图像处理之图像视频摄像头读取和保存

    OpenCv图像处理之图像视频摄像头读取与保存 使用cv::imread()读取图片 使用cv::imwrite()存储图片 使用cv::VideoCapture::open()读取视频 使用cv:: ...

  3. 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  4. OpenCV图像处理(十一)---图像梯度

    安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...

  5. 数字图像处理--基本图像操作

    数字图像处理–基本图像操作 1 主要内容 (1)搭建能运行图像算法程序的平台: (2)独立完成matlab矩阵基本操作,如矩阵信息的提取包括获取矩阵大小.矩阵维数.矩阵元素个数.向量长度和矩阵乘法等操 ...

  6. OpenCv图像处理之图像归一化

    OpenCv图像处理之图像归一化 归一化 中心化 标准化 归一化 图像处理中,图像单通道像素值为0~255之间的uchar类型,通常使用min-max归一化将其转化为0~1区间之间,既不会改变数据的分 ...

  7. Python OpenCV 图像处理之 图像运算和图像位运算知识补充

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 51 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...

  8. Opencv图像处理(图像的线性灰度变换)

    图像增强简介 分段线性法变换原理 代码实现和效果预览 疫情期间,楼主作为大三学生每天除了要应付网课和作业之外还得抽出时间准备研究生考试.虽说少了很多时间学习自己喜欢的知识,但近期由于课程作业关系需要在 ...

  9. python图像处理模糊_Python+OpenCV图像处理之模糊操作

    模糊操作是图像处理中最简单和常用的操作之一,该使用的操作之一原因就为了给图像预处理时减低噪声,基于数学的卷积操作 均值模糊,函数 cv2.blur(image,(5,5)),这是一个平滑图片的函数,它 ...

  10. Python+OpenCV图像处理之模糊操作

    模糊操作是图像处理中最简单和常用的操作之一,该使用的操作之一原因就为了给图像预处理时减低噪声,基于数学的卷积操作 均值模糊,函数 cv2.blur(image,(5,5)),这是一个平滑图片的函数,它 ...

最新文章

  1. pythorch学习笔记
  2. 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包
  3. CVPR 2021 | 跨模态点云补全新框架ViPC:用单一视图推断完整信息
  4. 华为交换机重制_华为交换机重置命令
  5. 不能将下载行为传输到IDM(亲测有效)
  6. 为什么有些微信群要不定期清理不活跃成员?
  7. db2 matlab实现,MATLAB MIMO-OFDM无线通信技术及 实现一书的源码和配套英文书267万源代码下载- www.pudn.com...
  8. Testin云测试以AI自动化技术打造业内领先的兼容测试服务平台
  9. AAC音频压缩(转载)
  10. mysql条件增量同步命令_DataX3 Mysql增量同步ES
  11. 【转】从一个App跳转到另一APP
  12. Java.SE01.多线程_案例01
  13. SOLIDWORKS Electrical端子排管理
  14. IPGuard启动加密常用的策略
  15. 程序设计-合并两个有序数组为一个有序数组(C++)
  16. it之家 materia design 版
  17. 您的WordPress网站的20个最佳会员插件
  18. Mybatis深入浅出系列
  19. Android studio最新版安装教程
  20. pmd格式模型 html加载,Three.js 模型载入

热门文章

  1. Redis集群方案介绍
  2. AIX主机FTP到LINUX服务器其中的磕碰记录
  3. 深入理解 Javascript 面向对象编程
  4. 初识THINKPHP--关于路径的问题(xampp下的htdocs为根目录)
  5. centos solr4.5 tomcat 简单安装[已测试ok]
  6. 以后给孩子起名字不用发愁了,先存着
  7. 附上一张公司项目解决方案的工程图
  8. Qt学习之路(21): event()
  9. VUE配置本地代理服务器
  10. 服务器未能识别 HTTP 标头 SOAPAction 的值