OpenCV成长之路 01、图像的读写与显示
一、工具篇
工欲善其事,必先利其器。学习OpenCV,肯定少不于基本的编程工具与OpenCV库。在Windows平台下你可以选择Visual Studio、CodeBlock等,当然你也可以选择在Linux平台,用VI、codeBlock都是可以的。编程平台的选择看个人爱好以及项目的开发环境。然后是OpenCV库,你可以在这里下载到最新的版本:http://opencv.org/,最近的版本已经到了2.4.7,但是OpenCV2.0以上版本差别都不算太大。关于怎么安装OpenCV,本文就不再详说了,此类教程实在太多,百度一下类似:VS2012+openCV2.4.6应该能找到你想要的结果。
二、第一个OpenCV程序
相比于“第一个C语言程序”或者“第一个Java程序”都以Hello,World!这种俗套的例程,我们的第一个OpenCV来显示一幅自己喜欢的图像。
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp> int main()
{
cv::Mat image;
image=cv::imread("../cat.png");
cv::namedWindow("cat");
cv::imshow("cat",image);
cv::waitKey();
return ;
}
关于上面的程序有以下几点要说明:
1,core.hpp于OpenCV的一些基础数据结构相关,highgui.hpp和openCV的一些界面相关,如显示图像的窗口。
2,Mat是OpenCV里最基本的一个类,它用来表示图像。
3,imshow是用来显示图像的函数,它的C++接口是:
void imshow(const string& winname, InputArray mat);
第一参数是窗口名,第二个参数是要显示的图像。
4,与OpenCV相关于类或者函数都在CV命名空间里。
5,想让上面程序正确显示出你的图像,请把图像放在正确的路径,或者直接写绝对路径。
上面程序中已经用到了图像的读入函数imread、图像的显示函数imshow,那么图像的写入函数imwrite就不会显示陌生了。
imwrite("output.jpg",image);
它的第一个参数是写图像的路径,第二个参数是要写入的图像。
三、创建一个图像
在我们的第一个OpenCV程序中,用Mat来声明了一个图像,声明后图像的大上为0*0的,当然我们也可以初始化一个固定大小的图像。
cv::Mat image(,,CV_8U,cv::Scalar());
上面的代码创建了一个灰度图像,大小是320*240,图像上每个点的数据类型是无符号8位的,并用100填充所有像素点。
你可以把CV_8U换成CV_8U3来创建一个三通道的彩色图像。或者用CV_16U创建无符号16位的。
四、赋值与复制
如果我们想得到一个图像的副本并进行了下面的操作。
Mat newImage=Image;
如果我们对newImage进行修改或操作,则会直接影响Image图像,因为newImage与Image共用了数据内容。
想要真正得到一个副本可以这样做:
Mat newImage;
Image.copyTo(newImage);//方法一
Mat newImage=image.clone();//方法二
很多时候,我们并不想得到原图像的复制,但是要创建一个跟原图像大小相同的图像。下面的代码可以完成这样的功能。
Mat newImage;
newImage.create(Image.size(),Image.type());
OpenCV成长之路 01、图像的读写与显示的更多相关文章
- OpenCV成长之路:图像直方图的应用
OpenCV成长之路:图像直方图的应用 2014-04-11 13:57:03 标签:opencv 图像 直方图 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...
- OpenCV成长之路:图像滤波
http://ronny.blog.51cto.com/8801997/1394138 OpenCV成长之路:图像滤波 2014-04-11 14:28:44 标签:opencv 边缘检测 sobel ...
- OpenCV成长之路:图像直方图
http://ronny.blog.51cto.com/8801997/1394115 2014-04-11 13:47:27 标签:opencv 直方图 统计表 原创作品,允许转载,转载时请务必以超 ...
- OpenCV成长之路:直线、轮廓的提取与描述
http://ronny.blog.51cto.com/8801997/1394139 OpenCV成长之路:直线.轮廓的提取与描述 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...
- 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析(转)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨) ...
- OpenCV成长之路(4):图像直方图
一.图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比. 图 ...
- OpenCV成长之路(2):图像的遍历
我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题. 一.遍历图像的4种方 ...
- OpenCV成长之路(7):图像滤波
滤波实际上是信号处理里的一个概念,而图像本身也可以看成是一个二维的信号.其中像素点灰度值的高低代表信号的强弱. 高频:图像中灰度变化剧烈的点. 低频:图像中平坦的,灰度变化不大的点. 根据图像的高频与 ...
- OpenCV成长之路(5):图像直方图的应用
正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射. 我们以人脸检测举例,在人脸检测中,我们第一步往往需要 ...
随机推荐
- 移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传
现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片 ...
- Java %c0%ae 安全模式绕过漏洞
漏洞类型:安全模式绕过漏洞 漏洞描述:在Java端"%c0%ae"解析为"\uC0AE",最后转义为ASCCII低字符-".".通过这个方法 ...
- MYSQL权限回收
给予最小权限 grant '; FLUSH PRIVILEGES 查看全部用户:select * from mysql. user \G. 查看权限. mysql> show grants fo ...
- PHP7的安装
PHP7和HHVM比较PHP7的在真实场景的性能确实已经和HHVM相当, 在一些场景甚至超过了HHVM.HHVM的运维复杂, 是多线程模型, 这就代表着如果一个线程导致crash了, 那么整个服务就挂 ...
- Ajax 局部刷新
方式一:function hits1(troops) { var troops = troops; var ajax=Ajax(); var url = 'xxx.php'; ...
- linux下的chm阅读器?
pre和code标签是可以同时使用的, 通常pre放在code的前面. 由于 code, pre中不能使用 换行, 段落, 和 尖括号标签, 所以, 对于尖括号, 要换成 html的 实体符号 < ...
- 在linux下运行apt-get update 时,报错/var/lib/apt/lists/lock
在运行apt-get update 时,报下面的错误: E: 无法获得锁 /var/lib/apt/lists/lock - open (11: Resource temporarily unavai ...
- Java通过JNI调用C
Java调用C有多种方式,本文介绍笔者最近的学习过程,避免今后再犯类似的错误. 首先,Java肯定是调用C的动态链接库,即通过编译器编译后的dll/so文件. 下面介绍gcc编译dll的方法. 一般情 ...
- ThinkPHP3.2.3扩展之生成PDF文件(MPDF)
目前是PHP生成PDF文件最好的插件了,今天介绍下在ThinkPHP3.2.3里如何使用. 先安照路径放好如图. 下面是使用方法 public function pdf(){ //引入类库 Vendo ...
- Spring Quartz定时调度任务配置
applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...