就是,给定我们一张图片,我们可以对图片的每一个像素的色彩进行处理

比如,我们的原图是这个样子

然后我首先将他变成灰度图(灰度图的行道是1,就是chanaual是1)

然后,我又将灰色图片的黑白进行颠倒

涉及的代码如下:

 #include<iostream>
#include<opencv.hpp> using namespace std;
using namespace cv; int main()
{ Mat sou;
sou = imread("C:\\Users\\32829\\Desktop\\aa.jpg");
if (sou.empty())
{
cout << "图像读入失败" << endl;
}
namedWindow("new");
imshow("new", sou); Mat dst;
//将原图改为灰度图,就是改变原图的色系
cvtColor(sou, dst, CV_BGR2GRAY);
namedWindow("old1");
imshow("old1", dst); int height = dst.rows;//获取目标图的高度
int weight = dst.cols;//获取目标图的宽度 for (int row = ; row < height; row++)
{
for (int col = ; col < weight; col++)
{
int grey = dst.at<uchar>(row, col);//获取图片的每一个像素点
dst.at<uchar>(row, col) = - grey;//将像素点变成他的补
}
}
namedWindow("old2");
imshow("old2", dst); waitKey();
return ;
}

上面是一通道的图片修改,下面是三通道的修改

原图和修改后的图片展示

 #include<iostream>
#include<opencv.hpp> using namespace std;
using namespace cv; int main()
{ Mat sou;
sou = imread("C:\\Users\\32829\\Desktop\\aa.jpg");
if (sou.empty())
{
cout << "图像读入失败" << endl;
}
namedWindow("new");
imshow("new", sou); Mat dst;
////将原图改为灰度图,就是改变原图的色系
//cvtColor(sou, dst, CV_BGR2GRAY);
//namedWindow("old1");
//imshow("old1", dst); //int height = dst.rows;//获取目标图的高度
//int weight = dst.cols;//获取目标图的宽度 //for (int row = 0; row < height; row++)
//{
// for (int col = 0; col < weight; col++)
// {
// int grey = dst.at<uchar>(row, col);//获取图片的每一个像素点
// dst.at<uchar>(row, col) = 255 - grey;//将像素点变成他的补
// }
//}
//namedWindow("old2");
//imshow("old2", dst); dst.create(sou.size(), sou.type());
namedWindow("old2");
imshow("old2", dst);
int height = dst.rows;//获取目标图的高度
int weight = dst.cols;//获取目标图的宽度
int chan = dst.channels(); for (int row = ; row < height; row++)
{
for (int col = ; col < weight; col++)
{
if (chan == )
{
int grey = dst.at<uchar>(row, col);//获取图片的每一个像素点
dst.at<uchar>(row, col) = - grey;//将像素点变成他的补
}
else if (chan==){
int b=sou.at<Vec3b>(row,col)[];//获取他的这个像素点的第一个值
int g = sou.at<Vec3b>(row, col)[];//获取他的这个像素点的第二个值
int r = sou.at<Vec3b>(row, col)[];//获取他的这个像素点的第三个值
//下面是修改像素值;
dst.at<Vec3b>(row, col)[] = - b;
dst.at<Vec3b>(row, col)[] = - g;
dst.at<Vec3b>(row, col)[] = - r;
}
}
} namedWindow("old4");
imshow("old4", dst); waitKey();
return ;
}

还有一个简单的方法:

然后代码就是将上面的for循环给删了

 #include<iostream>
#include<opencv.hpp> using namespace std;
using namespace cv; int main()
{ Mat sou;
sou = imread("C:\\Users\\32829\\Desktop\\aa.jpg");
if (sou.empty())
{
cout << "图像读入失败" << endl;
}
namedWindow("new");
imshow("new", sou); Mat dst; dst.create(sou.size(), sou.type());
namedWindow("old2");
imshow("old2", dst);
int height = dst.rows;//获取目标图的高度
int weight = dst.cols;//获取目标图的宽度
int chan = dst.channels(); /////////////////////////////////////////////////////////就加了这一行 bitwise_not(sou, dst); ////////////////////////////////////////////////////////////////////
namedWindow("old4");
imshow("old4", dst); waitKey();
return ;
}

基础知识整理:

====================================================================

============================================================================

=============================================================================

===========================================================================

(7)opencv图片内部的基本处理的更多相关文章

  1. 基于opencv图片切割

    基于opencv图片切割为n个3*3区块 工作原因,切割图片,任务急,暂留调通的源码,留以后用. package com.rosetta.image.test; import org.opencv.c ...

  2. Opencv图片明暗处理

    Opencv图片明暗处理 #include <iostream> #include <opencv2/opencv.hpp> using namespace std; usin ...

  3. Python OpenCV图片转视频 工具贴(三)

    Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...

  4. OpenCV图片类cv::Mat和QImage之间进行转换(好多相关文章)

    在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...

  5. OpenCV 图片尺寸调整

    http://blog.csdn.net/xiaoshengforever/article/details/12191303 2013-09-30 12:21 10842人阅读 评论(0) 收藏 举报 ...

  6. OpenCV图片矩阵操作相关,对png图片操作(多通道)

    文献链接: http://www.cnblogs.com/tornadomeet/archive/2012/12/26/2834336.html 下面这个高手,写了个小程序我还没有调试,回头 调试看看 ...

  7. 机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)

    7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的 ...

  8. opencv图片转幻灯片视频

    /*g++ *.cpp `pkg-config --cflags --libs opencv` -std=c++11*/ #include <opencv2/opencv.hpp> usi ...

  9. opencv图片右转函数

    因为需要将函数进行右转,发现opencv自带 的过于麻烦.自己写了个右转的.可以根据这个想法写出任何方向的 //函数功能,右转图片 IplImage* convertImage(IplImage* i ...

随机推荐

  1. 蓝牙 BLE 协议学习: 001-BLE协议栈整体架构

    背景 在深入BLE协议帧之前,我们先看一下BLE协议栈整体架构. 转载自:<深入浅出低功耗蓝牙(BLE)协议栈> 架构 如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片, ...

  2. hue中访问hdfs报错

    在hue中访问hdfs报错: Cannot access: /. Note: you are a Hue admin but not a HDFS superuser, "hdfs" ...

  3. visio 2019 激活方法

    今日因工作需要使用visio,无奈下载2019版本需要激活,很多功能无法使用,最近在网上发现一个非常简单就是一个本地可执行脚本,本人已亲测完全激活成功,随分享给大家 复制下面代码: @echo off ...

  4. 01.Delphi最简单的接口

    我想学习一个插件框架,但是那个框架里面大量用到了接口,于是不得不把接口看一下了.总感觉接口编程这一块非常的绕,每一行都注释了. unit Unit1; interface uses Windows, ...

  5. java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with specified [javax.transaction.TransactionManager] required

    错误信息: java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA trans ...

  6. JAVA笔记01 变量的取名

    第2章 有意义的命名2.1 介绍2.2 名副其实 变量名太随意,haha.list1.ok 这些都没啥意义2.3 避免误导 包含List等关键字.字母o与数字0等2.4 做有意义的区分 反面教材,变量 ...

  7. Java If ... Else

    章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...

  8. P1049 数列的片段和

    P1049 数列的片段和 转跳点:

  9. P1001 害死人不偿命的(3n+1)猜想 (Basic Level)

    转跳点:

  10. HihoCoder第十四周:无间道之并查集

    #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息--额,说远了,总之,小Hi和小H ...