利用opencv从本地获取图像,并进行图像缩放,彩色图转灰度图

来源:互联网 发布:qq主题软件 编辑:程序博客网 时间:2024/06/07 20:32

从本地获取图像:

#include "afx.h"

#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
 
int _tmain(int argc, _TCHAR* argv[]){
        const char* imagename = "1.jpg";
 
        //从文件中读入图像
        Mat img = imread(imagename);
 
        //如果读入图像失败
        if(img.empty())
        {
                fprintf(stderr, "Can not load image %s\n", imagename);
                return -1;
        }
 
        //显示图像,在哪个个窗口显示
        imshow("image", img); //void namedWindow(const string& winname, int flags = WINDOW_AUTOSIZE)//用来创建窗口的函数
        //此函数等待按键,按键盘任意键就返回
        waitKey();
 
        return 0;

        }

刚开始定义的头文件是#include<stdafx.h>,然后VS2012报错,找不到头文件,接着,将头文件改为afx.h,结果生成解决方案又报错,

 #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

解决方法:、在你的工程属性里添加 _AFXDLL 的定义(右键工程名->properties->C/C++->Preprocessor这一页下有Preprocessor Definitions 在这里添加)

然后就没有然后了@_@.





缩放图像文件

#include <opencv2/opencv.hpp>
using namespace std;
//隐藏控制台窗口
int main()
{
    const char *pstrImageName = "1.png";
    const char *pstrSaveImageName = "1.png";
    const char *pstrWindowsSrcTitle = "原图";
    const char *pstrWindowsDstTitle = "缩放图";
    
    double fScale = 0.314;        //缩放倍数
    CvSize czSize;                //目标图像尺寸
    
    //从文件中读取图像  
    IplImage *pSrcImage = cvLoadImage(pstrImageName, 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(pstrSaveImageName, pDstImage);
    
    cvDestroyWindow(pstrWindowsSrcTitle);
    cvDestroyWindow(pstrWindowsDstTitle);
    cvReleaseImage(&pSrcImage);
    cvReleaseImage(&pDstImage);
    return 0;
}

彩色图转灰度图:

#include "highgui.h"
#include <cv.h>
#include <cvaux.h>

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

     const char* imagename = "1.png";

     IplImage * img = cvLoadImage(imagename);
     if(!img)
     {
           fprintf(stderr, "Can not load image %s\n", imagename);
           return -1;
     }

     if( !img->imageData ) // 检查是否正确载入图像
           return -1;

     cvNamedWindow("image", CV_WINDOW_AUTOSIZE); //创建窗口
     cvShowImage("image", img); //显示图像

     IplImage* img1 = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);//创建目标图像
     cvCvtColor(img,img1,CV_BGR2GRAY);//cvCvtColor(src,des,CV_BGR2GRAY)
     cvNamedWindow("gray_image",CV_WINDOW_AUTOSIZE);//创建显示目标的窗口

     cvShowImage("gray_image",img1);//显示灰度图像

     cvWaitKey();

     cvReleaseImage(&img);
     cvReleaseImage(&img1);
     cvDestroyAllWindows();
     return 0;
}



0 0
原创粉丝点击