(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 ...
随机推荐
- 十一 Socket编程
一. 计算机网络: 将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来在网络操作系统.网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 二. ...
- POJ 3273:Monthly Expense 二分好题啊啊啊啊啊啊
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19207 Accepted: 7630 ...
- HihoCoder第二周与POJ3630:Trie树的建立
这又是两道一样的题,都是建立trie树的过程. HihoCoder第二周: 这里其实逻辑都很简单,主要在于数据结构struct的使用. #include <iostream> #inclu ...
- Jmeter测试入门——分析HBase访问服务性能瓶颈
开启HBase服务 新建线程组,设定线程数为10: 设定请求方法和请求参数: 查看请求的返回结果: 查看服务响应的性能分析结果: 可能出问题的地方:Phoenix.数据库连接池(操作Phoenix)
- 题解:luogu P1247
大概没你们说得复杂吧...... \(Part\;1\) \(Nim\)游戏 大家都对异或和感到懵逼吧(排除大佬),其实很简单,用\(SG\)函数打表计算即可解决: 抛个板子: void get_sg ...
- ionic实现滑动的三种方式
在移动端受屏幕大小所限,展示内容很多的时候,就要使部分区域进行滑动.本文展示项目中所有到的几种方式,大家可以看自己的需求选择合适的滑动方式.实现滑动的基本原理,有两个容器A.B,假如A在外层,B在内层 ...
- Koa原理和封装
相关文章 最基础 实现一个简单的koa2框架 实现一个简版koa koa实践及其手撸 Koa源码只有4个js文件 application.js:简单封装http.createServer()并整合co ...
- docker安装centos7镜像
拉取centos7镜像[root@localhost ~]# docker pull centos:71启动镜像centos7,如果不指定 /bin/bash,容器运行后会自动停止[root@loca ...
- C# 控制台应用程序从外部传参运行和调试
参考:/*十有三博客*/ 新建一个用于演示的控制台应用程序项目,然后在Program.cs的入口Main方法里编写如下代码 foreach (var arg in args) { Console.Wr ...
- [题解] LuoguP4091 [HEOI2016/TJOI2016]求和
传送门 首先我们来看一下怎么求\(S(m,n)\). 注意到第二类斯特林数的组合意义就是将\(m\)个不同的物品放到\(n\)个没有区别的盒子里,不允许有空盒子的方案数. 那么将\(m\)个不同的物品 ...