标签:opencv
因为要读研,而且搞的是图像方向,老师说要搞图像方向matlab和openCV是最常用的,所以在读研之前希望把代码从c#和JAVA转到c++中,并且为以后深入的学习图像打好基础。言归正传~
先利用这个小例子来简单的了解一下图像从读入内存,在内存中操作图像,在屏幕上显示,最终存到硬盘上的全部过程走一遍。本人喜欢把写出的程序变成方法,利用几个必要地参数来进行调用,可以防止以后代码越来越多,让自己看不懂。
1.首先介绍几个结构体
【1】IplImage:Intel Image Processing Library (IPL)
百度百科上说这是最重要的一个结构体了,因为这个类型就相当于C#中的BitMap或一个二维数组来表示这个图像,只是openCV有个专属的结构而已。
【2】CvSize:
typedef struct CvSize
①图像载入函数(把硬盘上的图像文件读入内存中)
3.疑惑
~到底IplImage类型是怎么个形式?任意位置的像素点怎么操作?
~放缩时候像素点的转换的本质是什么?图片缩小像素点应该变少,因为最终的文件大小也相应的变小了,但是变换的程度和放缩的比例好像不成正比,这其中是个什么关系?#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main()
{
void ImageZoom(char *,float,char *);
ImageZoom("lenna.jpg",0.314,"lenna缩放图.jpg");
return 0;
}
//图片缩放方法
/*1、原图片和缩放之后的图片的展示
2、肯以根据参数来进行长宽的倍数调整
3、最后保存至当前项目中,名字叫ImageName缩放图
*/
void ImageZoom(char *ImageName,float scale,char *SaveName)
{
const char *pstrWindowsSrcTitle = "原图";
const char *pstrWindowsDstTitle = "缩放图";
double fScale = 0.3; //缩放倍数
CvSize czSize; //目标图像尺寸
//从文件中读取图像
IplImage *pSrcImage = cvLoadImage(ImageName,CV_LOAD_IMAGE_UNCHANGED);
IplImage *pDstImage = NULL;
//计算目标图像大小
czSize.width = pSrcImage->width * fScale;
czSize.height = pSrcImage->height * fScale;
//创建图像并缩放
pDstImage = cvCreateImage(czSize, pSrcImage->depth, pSrcImage->nChannels);
cvResize(pSrcImage, pDstImage,CV_INTER_AREA);
//创建窗口
cvNamedWindow(pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE);
cvNamedWindow(pstrWindowsDstTitle, CV_WINDOW_AUTOSIZE);
//在指定窗口中显示图像
cvShowImage(pstrWindowsSrcTitle, pSrcImage);
cvShowImage(pstrWindowsDstTitle, pDstImage);
//等待按键事件
cvWaitKey();
//保存图片,在使用之后要销毁窗口和图片
cvSaveImage(SaveName,pDstImage);
cvDestroyWindow(pstrWindowsSrcTitle);
cvDestroyWindow(pstrWindowsDstTitle);
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pDstImage);
}OpenCV入门学习(一)图像放缩【简单的按比例放缩,无技术含量】
标签:opencv
原文地址:http://blog.csdn.net/u012816621/article/details/44984821