您的位置:首页 > 理论基础

OpenCV2计算机视觉应用编程手册(自学版)初级二

2014-11-27 22:29 471 查看
OpenCV2计算机视觉应用编程手册(自学版)初级二

本部分实现的功能包括:

/******************************************************************************************

1-- 读取图像的高度和宽度--很有必要建议学习一下Matlab,很相似的

方法1:

cout<< "size: "<< image.cols << " , "<< image.rows << endl;// 方法

方法2:

cout << "size: " << image.size().height << " , "<< image.size().width << endl;

2 复制图像

image=img;// 如果我们对image 进行操作的时候,img 数据也会改变。在opencv中image和img指向

了同一块内存区域,opencv并没有给image重新分配一块内存区域。

3--图像翻转

flip(image,result,1); // positive for horizontal

// 参数 1-- 水平翻转 0--垂直翻转 负数--- 水平和垂直都翻转

4--图像保存

imwrite("F:\\output.bmp", result);//保存图像,和matlab操作一样

5--调用复制函数copyTo

result.copyTo(image3); // a new copy is created

(1)解释:重要

Mat newImage=Image;

如果我们对newImage进行修改或操作,则会直接影响Image图像,因为newImage与Image共用了数据内容。

想要真正得到一个副本可以这样做:

Mat newImage;Image.copyTo(newImage);// 方法一

Mat newImage=image.clone();//方法二

(2)很多时候,我们并不想得到原图像的复制,但是要创建一个跟原图像大小相同的图像。

下面的代码可以完成 这 样的功能。

Mat newImage;

newImage.create(Image.size(),Image.type());

6--调用函数,显示一幅人为生成的灰度图像

**************************************************************************************/

/*******************************************************

时间:2014年11月27日22:37:00

整理:天空之恋

运行环境:VS2008+OpenCV2.3.1+Win7

运行问题:编译通过、运行成功

参考:OpenCV.2.Computer.Vision.Application.Programming.Cookbook配套例程,但是

有些东西是自己修改的。这本书和配套例程CSDN上面有免费分享的,没有的朋友可以去

我的网盘下载:http://pan.baidu.com/s/1hqEbDDa

*****************************************************/

#include "stdafx.h"

#include<iostream>

#include <opencv2/opencv.hpp>

using namespace std;// 使用STD

using namespace cv;// 使用名字空间

/*

显示灰度图像

下面的代码创建了一个灰度图像,大小是*240,图像上每个点的数据类型是无符号位的,并用填充所有像素点。

你可以把CV_8U换成CV_8U3来创建一个三通道的彩色图像。或者用CV_16U创建无符号位的。

*/

Mat function() {

// create image

Mat ima(240,320,CV_8U,cv::Scalar(100));

// return it

return ima;

}

int main(int argc, char* argv[])

{

const char* imagename = "F:\\house.jpg";



Mat image;//读入之前

cout << "size: " << image.size().height << " , "<< image.size().width << endl;//没有赋值之前是0

//从文件中读入图像

Mat img = imread(imagename);//这个地方类似matlab,在这个地方我要好好学习了

//如果读入图像失败

if(img.empty())

{

fprintf(stderr, "Can not load image %s\n", imagename);

return -1;

}

//1--- 输出高度和宽度

image=img;

//cout<< "size: "<< image.cols << " , "<< image.rows << endl;// 方法

cout << "size: " << image.size().height << " , "<< image.size().width << endl;

//2显示图像

//namedWindow("第一个Opencv测试程序");

imshow("第一个Opencv测试程序", img);

//此函数等待按键,按键盘任意键就返回

//声明另外一个矩阵存储处理之后的图片,调用Flip来水平翻转图像

// 参数水平翻转0 垂直翻转-1 水平和垂直都翻转

Mat result;

// flip the image

flip(image,result,1); // positive for horizontal

// 0 for vertical,

// negative for both

// display result

namedWindow("Output Image");

imshow("Output Image", result);

waitKey(10);

// write image on file

imwrite("F:\\output.bmp", result);//保存图像,和matlab操作一样

// 复制一个新的数组

Mat image3;// 测试复制函数

result.copyTo(image3); // a new copy is created

// flip vertically this time

flip(result,result,0);

// display result

namedWindow("image 3");

imshow("image 3", image3);

// 调用自己生成的灰度函数

Mat gray= function();

// display result

namedWindow("Gray Image");

imshow("Gray Image", gray);

waitKey(200);

fprintf(stderr, "we have load image %s\n", imagename);

waitKey();

return 0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: