OpenCV(C++接口)学习笔记1-图像读取、显示、保存
OpenCV在2.0加入版本号之后C++接口函数,学习前C语言的接口功能。现在OpenCV它已被发展到2.4.9版本号,所以,我决定学习C++接口函数,与步伐。
1、创建图像
cv::Mat image;
採用类cv::Mat来定义图像变量或矩阵变量。
当然你也能够指定图像的大小:
cv::Mat img(240,320,CV_8U,cv::Scalar(100));
參数CV_8U中的U代表unsigned,而S代表signed.对于三通道彩色图像能够用CV_8UC3。你也能够声明16或32位的整型三通道图像(如CV_16SC3)。
我们能够通过调用size()函数能够获取图像的大小。
std::cout << "size: " << image.size().height << " , "
<< image.size().width << std::endl;
2、获取图像
image= cv::imread("img.jpg");
3、显示图像
cv::namedWindow("Original Image"); // define the window
cv::imshow("Original Image", image); // show the image
4、保存图像
cv::imwrite("output.bmp", result);
5、复制
在这里“=”运算符使得两个图像共享同一个数据,假设想要创建一个图像并复制原图像的数据到新的内存区域,则须要调用成员函数copyTo()。
cv::Mat image2, image3;
image2= result; // the two images refer to the same data
result.copyTo(image3); // a new copy is created
所以我们能够放心地用函数返回一幅图像:
cv::Mat function() {
// create image
cv::Mat ima(240,320,CV_8U,cv::Scalar(100));
// return it
return ima;
}
在main函数中我们调用function():
// get a gray-level image
cv::Mat gray= function();
则gray与ima共享的是同一数据。
6、IplImage和Mat转换
IplImage* iplImage = cvLoadImage("c:\\img.jpg");
cv::Mat image4(iplImage,false);
这样的方式要注意调用cvReleaseImage(&iplImage);来释放内存。
cv::Mat image4(iplImage,false);中的第二个參数的作用是说明是否复制图像数据到新的内存区域,false则为否,true为是。
假设选否,则两幅图像共用同一片内存区域。此时假设调用cvReleaseImage(&iplImage);则将会使得image4中的数据被释放。
为防止忘记释放内存,你能够採用下面方式来创建:
cv::Ptr<IplImage> iplImage = cvLoadImage("c:\\img.jpg");
可是,最好的方法还是直接採用cv::Mat来定义图像。
7、x。y轴的仿射变换
cv::flip()函数进行仿射变换。函数的第三个參数取值:正则表示水平变化。0则表示垂直变化,负则两个都变。
cv::Mat result;
cv::flip(image,result,1); // positive for horizontal
// 0 for vertical,
// negative for both
例程1:
/************************************************************************/
/* 打开并显示图像,并对图像进行关于x,y轴的仿射变换 */
/************************************************************************/ #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <string>
using std::string;
using namespace cv; int main()
{
string str="E:\\test\\LENA.BMP";
Mat img1= imread(str);
if (img1.data)
{
namedWindow("LENA");
imshow("LENA",img1);
Mat res;
flip(img1,res,-1);
namedWindow("result");
imshow("result",res);
waitKey(); } return 1;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
OpenCV(C++接口)学习笔记1-图像读取、显示、保存的更多相关文章
- openCV学习——一、图像读取、显示、输出
openCV学习——一.图像读取.显示.输出 一.Mat imread(const string& filename,int flags=1),用于读取图片 1.参数介绍 filename ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- Caffe学习笔记4图像特征进行可视化
Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...
- [OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...
- JMeter接口学习笔记2017
协议学习地址:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html 本篇学习笔记来自于慕课网上学习JMeter的学习笔记 学习 ...
- OpenCV for Python 学习笔记 一
本人的学习笔记主要记录的是学习opencv-python-tutorials这本书中的笔记 今天晚上简单学习OpenCV for Python如何绘图,主要用了这几个函数(这几个函数可在:http:/ ...
- matlab学习笔记4--多媒体文件的保存和读取
一起来学matlab-matlab学习笔记4 数据导入和导出_2 多媒体文件的保存和读取 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用&g ...
- 【opencv系列02】OpenCV4.X图像读取与显示
一.读取图片 opencv中采用imread() 函数读取图像 imread(filename, flags=None) filename 图片的路径 flags 图像读取方式 ● c ...
- [Python学习笔记]文件的读取写入
文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...
随机推荐
- Reset and clock control (RCC) STM32L
Reset: 1.系统复位:A system reset sets all registers to their reset values except for the RTC, RTC backup ...
- android windows 上JNI编程
昨天学习windows上的JNI编程,JNI说白了就是java和c语言的一个互相沟通的桥梁.java能够调用JNI来完毕调用C语言实现的方法. JNI的全称是(Java native interfac ...
- Java RMI(远程方法调用) 实例与分析 (转)
目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocat ...
- erlang集群IP及port管理
erlang集群是依靠epmd维护的,epmd是erlang集群节点间port映射的守护进程.负责维护集群内的节点连接.提供节点名称到IP地址及port的解析服务. epmd 自己定义port号 ep ...
- Javadoc的Html文件传输chm
Javadoc的Html文件转chm 工具下载地址:http://msdn.microsoft.com/en-us/library/ms669985.aspx 两篇相关文章: MyEclipse ...
- HDU 1856 More is better(并查集+离散化)
题目地址:HDU 1856 水题.因为标号范围太大,而数据数仅仅有10w,所以要先进行离散化.然后就是裸的并查集了. 代码例如以下: #include <iostream> #includ ...
- [笔记] C# Windows Phone 8 WP8 开发,判断目前网路是否可用。
原文:[笔记] C# Windows Phone 8 WP8 开发,判断目前网路是否可用. 常常我们在开发Windows Phone 8 App时会使用网路来读取网页的资料或其他开放平台的Json.X ...
- Hbase结构简单、作法
Hbase架构简单介绍.实践 版权声明:本文博主原创文章,博客,未经同意不得转载.
- zoj 3288 Domination (可能dp)
///dp[i][j][k]代表i行j列件,并把一k的概率 ///dp[i][j][k]一种常见的方法有四种传输 ///1:dp[i-1][j][k-1] 可能 (n-(i-1))*j/(n*m-(k ...
- Linux高性能server规划——多进程编程
多进程编程 多进程编程包含例如以下内容: 复制进程影映像的fork系统调用和替换进程映像的exec系列系统调用. 僵尸进程以及怎样避免僵尸进程 进程间通信(Inter-Process Communic ...