(7)opencv图片内部的基本处理
就是,给定我们一张图片,我们可以对图片的每一个像素的色彩进行处理
比如,我们的原图是这个样子

然后我首先将他变成灰度图(灰度图的行道是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图片内部的基本处理的更多相关文章
- 基于opencv图片切割
基于opencv图片切割为n个3*3区块 工作原因,切割图片,任务急,暂留调通的源码,留以后用. package com.rosetta.image.test; import org.opencv.c ...
- Opencv图片明暗处理
Opencv图片明暗处理 #include <iostream> #include <opencv2/opencv.hpp> using namespace std; usin ...
- Python OpenCV图片转视频 工具贴(三)
Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...
- OpenCV图片类cv::Mat和QImage之间进行转换(好多相关文章)
在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...
- OpenCV 图片尺寸调整
http://blog.csdn.net/xiaoshengforever/article/details/12191303 2013-09-30 12:21 10842人阅读 评论(0) 收藏 举报 ...
- OpenCV图片矩阵操作相关,对png图片操作(多通道)
文献链接: http://www.cnblogs.com/tornadomeet/archive/2012/12/26/2834336.html 下面这个高手,写了个小程序我还没有调试,回头 调试看看 ...
- 机器学习进阶-项目实战-信用卡数字识别 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表示需要填写的 ...
- opencv图片转幻灯片视频
/*g++ *.cpp `pkg-config --cflags --libs opencv` -std=c++11*/ #include <opencv2/opencv.hpp> usi ...
- opencv图片右转函数
因为需要将函数进行右转,发现opencv自带 的过于麻烦.自己写了个右转的.可以根据这个想法写出任何方向的 //函数功能,右转图片 IplImage* convertImage(IplImage* i ...
随机推荐
- 蓝牙 BLE 协议学习: 001-BLE协议栈整体架构
背景 在深入BLE协议帧之前,我们先看一下BLE协议栈整体架构. 转载自:<深入浅出低功耗蓝牙(BLE)协议栈> 架构 如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片, ...
- hue中访问hdfs报错
在hue中访问hdfs报错: Cannot access: /. Note: you are a Hue admin but not a HDFS superuser, "hdfs" ...
- visio 2019 激活方法
今日因工作需要使用visio,无奈下载2019版本需要激活,很多功能无法使用,最近在网上发现一个非常简单就是一个本地可执行脚本,本人已亲测完全激活成功,随分享给大家 复制下面代码: @echo off ...
- 01.Delphi最简单的接口
我想学习一个插件框架,但是那个框架里面大量用到了接口,于是不得不把接口看一下了.总感觉接口编程这一块非常的绕,每一行都注释了. unit Unit1; interface uses Windows, ...
- 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 ...
- JAVA笔记01 变量的取名
第2章 有意义的命名2.1 介绍2.2 名副其实 变量名太随意,haha.list1.ok 这些都没啥意义2.3 避免误导 包含List等关键字.字母o与数字0等2.4 做有意义的区分 反面教材,变量 ...
- Java If ... Else
章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...
- P1049 数列的片段和
P1049 数列的片段和 转跳点:
- P1001 害死人不偿命的(3n+1)猜想 (Basic Level)
转跳点:
- HihoCoder第十四周:无间道之并查集
#1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息--额,说远了,总之,小Hi和小H ...