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

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

然后我首先将他变成灰度图(灰度图的行道是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. APP自动化测试获取包名的两种方法

    获取包名的两种方法: 一.通过aapt获取 1.进入aapt.exe所在路径 2.在地址栏输入cmd回车,打开dos命令窗口. 3.在命令窗口输入 aapt dump badging 拖入apk 回车 ...

  2. (转)浅谈 Linux 内核无线子系统

    前言 Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送和接收呢? 刚开始工作接触 Linux 无线网络时,我曾迷失在浩瀚的基础代码中,寻找具有介绍性的材料来回答如上面提到的那些高 ...

  3. windows下安装多台mysql数据库且实现主从复制

    版本如下: windows server 2012 R2 mysql server 5.7.25安装版 / mysql server 5.7.25 解压版 * 这里为啥还要有安装版和解压版勒,主要是因 ...

  4. 浅谈JVM线程调度机制及主要策略

    在之前有说过线程,应该都知道,所谓线程就是进程中的一个子任务,一个进程有多个线程.今天的话主要就是谈一谈JVM线程调度机制.我们结合线程来说,当我们在做多线程的案例时,如一个经典案例,火车站卖票. * ...

  5. VUE - vue.runtime.esm.js?6e6d:619 [Vue warn]: Do not use built-in or reserved HTML elements as component i

    <script> export default {     name:'header'       //  不要使用内置或保留的HTML元素 , 改为Header或者置或保留的HTML元素 ...

  6. R WLS矫正方差非齐《回归分析与线性统计模型》page115

    rm(list = ls()) A = read.csv("data115.csv") fm = lm(y~x1+x2,data = A) coef(fm) A.cooks = c ...

  7. 033.SAP上查看IDOC接口,PI接口查不到的日志记录,可能在IDOC接口日志里面

    01. SAP系统发料之后,数据没有传输到条码系统,同事也没有任何bc01的日志,这是就要考虑是不是在IDOC接口了,输入事务代码WE02或者WE05 02.双击查看内容 03.点开就能看到详细内容了 ...

  8. ubuntu18.04.2 Hadoop伪集群搭建

    准备工作: 若没有下载vim请下载vim 若出现 Could not get lock /var/lib/dpkg/lock 问题请参考: https://jingyan.baidu.com/arti ...

  9. 四、Vue过渡与动画、过渡css类名、自定义指定、过滤器

    一.过渡 动画 1.1简单的过渡动画使用 parent.vue [0]定义一个待显示的数据 [1]定义一个显示隐藏flag [2]使用动画过滤标签,name用来连接style样式:v-show用来控制 ...

  10. 从零到Django大牛的的进阶之路01

    搭建 创建虚拟环境 mkvirtualenv django_py3_1.11 -p python3 安装Django pip install django==1.11.11 创建工程 django-a ...