程序如下

#include "opencv2/opencv.hpp"
using namespace cv; int main()
{
// 灰度图
Mat original = imread("girl.jpg",CV_LOAD_IMAGE_GRAYSCALE);
Mat modified = imread("girl.jpg",CV_LOAD_IMAGE_GRAYSCALE); // 彩色图
//Mat original = imread("girl.jpg",CV_LOAD_IMAGE_COLOR);
//Mat modified = imread("girl.jpg",CV_LOAD_IMAGE_COLOR); for (int r = 0; r < modified.rows; r++)
{
for (int c = 0; c < modified.cols; c++)
{
// 灰度图
modified.at<uchar>(r, c) = modified.at<uchar>(r, c) * 0.6; // 彩色图
//modified.at<Vec3b>(r, c)[0] = modified.at<Vec3b>(r, c)[0] * 0;
//modified.at<Vec3b>(r, c)[1] = modified.at<Vec3b>(r, c)[1] * 0;
//modified.at<Vec3b>(r, c)[2] = modified.at<Vec3b>(r, c)[2] * 0;
}
} imshow("Original", original);
imshow("Modified", modified); waitKey();
return 0;
}

运行结果如下:

图像减色

通过图像行列,遍历图像的每个像素,通过Mat的成员函数at<>,把每个通道的像素值减少, 但这种方法较慢。

灰度图

灰度图只有一个通道,效果见下图。代码如下:

modified.at<uchar>(r, c) = modified.at<uchar>(r, c) * 0.6;

彩色图

彩色图有三个通道,分别对每个通道减色, 每次只运行下面一条语句, 读取时采用 CV_LOAD_IMAGE_COLOR。程序如下:

modified.at<Vec3b>(r, c)[0] = modified.at<Vec3b>(r, c)[0] * 0;

modified.at<Vec3b>(r, c)[1] = modified.at<Vec3b>(r, c)[1] * 0;

modified.at<Vec3b>(r, c)[2] = modified.at<Vec3b>(r, c)[2] * 0;

效果见图。

opencv3 学习四 - 图像减色的更多相关文章

  1. opencv3 学习三 - 图像输入输出显示等

    程序如下 #include "opencv2/opencv.hpp" using namespace cv; int main() { Mat file1 = imread(&qu ...

  2. TweenMax动画库学习(四)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  3. Java基于opencv实现图像数字识别(四)—图像降噪

    Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...

  4. SVG 学习<四> 基础API

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  5. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  6. 深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全

    深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全 原文地址:Image Completion with Deep Learning in TensorFlow by Bra ...

  7. OpenCV3学习笔记

    http://blog.csdn.net/u010429424/article/details/73691001 http://blog.csdn.net/zhaoxfxy/article/detai ...

  8. SCARA——OpenGL入门学习四(颜色)

    OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...

  9. ZigBee学习四 无线+UART通信

    ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...

随机推荐

  1. Oracle案例07——ORA-28000: the account is locked

    遇到这个错误,一般我们想到的是数据库用户被锁,只需要执行用户解锁即可恢复,但这里之所以写出来是因为比较奇葩的一个问题. 昨天下午接同事信息,说一个用户连接报被锁,经过沟通发现其实连接一个ADG的备库作 ...

  2. ACM HDU 1755 -- A Number Puzzle

    A Number Puzzle Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. 简单的python爬虫--爬取Taobao淘女郎信息

    最近在学Python的爬虫,顺便就练习了一下爬取淘宝上的淘女郎信息:手法简单,由于淘宝网站本上做了很多的防爬措施,应此效果不太好! 爬虫的入口:https://mm.taobao.com/json/r ...

  4. ue-edit设置显示函数列表

    UltraEdit的函数列表竟然不显示函数,那这功能要它何用,应该如何才能让函数显示出来呢? 公司编程基本上都在UltraEdit中进行,俺刚来公司还不熟悉,今天装了个UltraEdit,可是看着别人 ...

  5. Spring 的下载、安装和使用

    一.下载 Spring 下载地址:http://repo.spring.io/libs-release-local/org/springframework/spring/4.0.6.RELEASE/  ...

  6. IntelliJ IDEA中 查看某个类中的所有方法

    方法一:alt + 7 方法二: ctrl + F12 方法三: 自定义 File Structure

  7. HBase的rowkey排序和scan输出顺序

    本文目的:搞清楚HBase里面行与行之间的排序排序规则,如何正序和反序输出扫描结果. 明确: HBase里面同一列的元素按照rowkey进行排序,排序规则是rowkey的ASCII码排序,小的在前大的 ...

  8. chromedriver链接

    http://npm.taobao.org/mirrors/chromedriver/

  9. PHP------关于字符串的处理

    每一种语言对,字符串都是比较重要的,因为字符串牵扯到输出. 尤其是在网页里面,所有的内容输出,都要以字符串的形式展示在页面上.比如,输出换行.输出一段话或者输出一个标签,都是以字符串来输出的:有时用数 ...

  10. php 日志扩展

    今天发现一个比较好的php应用日志扩展,这里先mark一下,回头有空再详细介绍: http://neeke.github.io/SeasLog/