标签: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