1.图像是由像素组成的,所以修改了像素就可以实现图像的改变。

2先看灰度图像(单通道):

*****2.获取灰度图像的像素值使用:  int gray = gray_src.at<uchar>(row, col);

*****3.修改灰度图像的像素值使用:gray_src.at<uchar>(row, col) = 255 - gray;//对每一个像素取反

*****源代码,对灰度图像像素值全部取反

#include<opencv2\opencv.hpp>
#include<iostream> using namespace std;
using namespace cv;
/*图像操作*/
int main(int argc, char **argv)
{
Mat src = imread("E:\\vsprom\\learn02\\nv1.jpg");
if (src.empty())
{
cout << "can not load imagefile...." << endl;
return -1;
}
namedWindow("in image win", CV_WINDOW_AUTOSIZE);
imshow("in image win", src); /*将一个RGB图像转为GRAY图像*/
Mat gray_src;
cvtColor(src,gray_src,CV_BGR2GRAY); 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 gray = gray_src.at<uchar>(row, col);/*读取一个GRAY像素点的像素值(CV_8UC1)*/
gray_src.at<uchar>(row, col) = 255 - gray;//对每一个像素取反
}
}
namedWindow("gray image win", CV_WINDOW_AUTOSIZE);
imshow("gray image win", gray_src); waitKey(0);
return 0;
}

  效果图:

3.RGB图像的像素操作

读像素值

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;

源代码实例:

    /*获取RGB的像素值*/
Mat dst;
dst.create(src.size(), src.type());
int height = dst.rows;
int width = dst.cols;
int cn = src.channels();//通道数 for (int row = ; row < height; row++)
{
for (int col = ; col < width; col++)
{
if (cn == )
{
int gray = dst.at<uchar>(row, col);/*读取一个GRAY像素点的像素值(CV_8UC1)*/
dst.at<uchar>(row, col) = - gray;//对每一个像素取反 }
else if(cn==)
{
int b = src.at<Vec3b>(row, col)[];//第一个通道
int g = src.at<Vec3b>(row, col)[];//第二个通道
int r = src.at<Vec3b>(row, col)[];//第三个通道
dst.at<Vec3b>(row, col)[] = - b;
dst.at<Vec3b>(row, col)[] = - g;
dst.at<Vec3b>(row, col)[] = - r;
} }
}
namedWindow("rgb image win", CV_WINDOW_AUTOSIZE);
imshow("rgb image win", dst);

产看输出效果图

跟我一起学opencv 第四课之图像的基本操作的更多相关文章

  1. 跟我一起学opencv 第三课之图像在opencv中的表示-Mat对象

    1.下面第一章图是一位美女图像,和其他数据一样图像在计算机中也是以二进制存储,下面第二张图 2.在摄像头眼里一幅图像就是一个矩阵或者说是二维数组,数组元素是像素值 3.opencv中以Mat对象表示图 ...

  2. 跟我一起学opencv 第五课之图像的混合

    *理论-线性混合操作 g(x) = (1-α)f0(x)+αf1(x)  α的取值范围位0-1之间  f0(x)为图像1,f1(x)表示第二张图像 α是混合系数   g(x)是生成的图像,对每一个像素 ...

  3. 跟我一起学opencv 第五课之调整图像亮度和对比度

    一.调整图像亮度与对比度 1.图像变换 ---像素变换-点操作 ---邻域操作-区域操作 调整图像亮度和对比度属于像素变换-点操作 公式为:g(i,j) = αf(i,j) + β 其中α>0 ...

  4. 小哈学Python第四课--运算符

    运算符: 1.算数运算符: 2. 比较运算符 3.赋值运算符 4. 逻辑运算符: 5. 成员运算:

  5. 快学Scala 第四课 (多维数组,与Java集合的互操作)

    Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...

  6. 从零开始学Kotlin第四课

    面向对象: //妹子 性格 声音 class Girl(var chactor:String,var voice:String) fun main(args: Array<String>) ...

  7. opencv第三课,图像滤波

    1.介绍 OpenCV图像处理技术中比较热门的图像滤波操作主要被分为了两大类:线性邻域滤波和非线性滤波.线性邻域滤波常见的有“方框滤波“,”均值滤波“和”高斯滤波“三种,二常见的非线性滤波主要是中值滤 ...

  8. NeHe OpenGL教程 第二十四课:扩展

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. 【C语言探险】 第四课的第二部分:串

    内容简单介绍 1.课程大纲 2.第二部分第四课: 字符串 3.第二部分第五课预告: 预处理 课程大纲 我们的课程分为四大部分,每个部分结束后都会有练习题,并会发布答案.还会带大家用C语言编写三个游戏. ...

随机推荐

  1. SQL基本语句的优化10个原则

    原则一:尽量避免在列上进行运算,这样会导致索引失效. 例如: ; 优化: SELECT * FROM table WHERE d >= '2011-01-01'; 原则二:使用JOIN时,应该用 ...

  2. java反射机制,以及对反射机制的了解,如有差池欢迎点评(初学者勿喷)

    本人学习java时间不长,但是对java很感兴趣,知道有博客园这个平台果断的注册,记录我的java成长日记,这也是我的处女作,虽然很菜但是还是希望大家能见证我的成长,觉得可以的可以和我讨论一起学习 在 ...

  3. 关于react router 4 的小实践

    详细代码栗子:https://github.com/wayaha/react-dom-CY clone然后 npm install npm start 分割线 1.这个项目使用create-react ...

  4. mybatis源码解读(四)——事务的配置

    上一篇博客我们介绍了mybatis中关于数据源的配置原理,本篇博客介绍mybatis的事务管理. 对于事务,我们是在mybatis-configuration.xml 文件中配置的: 关于解析 < ...

  5. Java核心卷笔记(一)

    第三章Java基程序设计结构 1.注释 三种注释方式: // 注释单行 /* 内容 */ 注释单行 /** * 内容 */ 2. java 数据类型 Java数据类型可分为两种:基本数据类型和引用数据 ...

  6. 使用XHProf分析PHP性能瓶颈(二)

    上一篇文章里,我们介绍了如何基于xhprof扩展来分析PHP性能,并记录到日志里,最后使用xhprof扩展自带的UI在web里展示出来.本篇文章将讲述2个知识点: 使用xhgui代替xhprof的默认 ...

  7. .NET开发设计模式-单例模式

    解释:单例模式主要特点:确保一个类只有一个实例,并提供一个访问它的全局访问点 意思就是说:在多线程的情况下:A先进行创建了该实例.B再进来访问时就不需要再创建了. using System; usin ...

  8. PAT1077: Kuchiguse

    1077. Kuchiguse (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HOU, Qiming The Japan ...

  9. vi/vim操作

    vi/vim是unix/linux操作系统下的文本编辑器. 由于unix/linux万物届文件的特性,vi/vim可以编辑任何格式的文件. 下面是常见的知识点,仅供参考: 编辑方式:vi/vim + ...

  10. Eclipse中导入项目后js报错解决方法

    http://blog.csdn.net/chenchunlin526/article/details/54666882 原因是因为开启了js的校验功能 不影响项目 如需去除错误标志按链接文档操作即可 ...