1. 程式人生 > >OpenCV中C++函式imread讀取圖片的問題

OpenCV中C++函式imread讀取圖片的問題

#include "stdafx.h"

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


#include <math.h>
#include <stdlib.h>
#include <stdio.h>

using namespace cv;

Mat src, dst, tmp;
char* window_name = "Pyramids Demo";

int _tmain(int argc, _TCHAR* argv[])
{
    printf("\n Zoom In-Out demo \n");
    printf("-------------------- \n");
    printf("*[u]-> Zoom in \n");
    printf("*[d]-> Zoom out \n");
    printf("*[ESC]-> Close program \n\n");

    src = imread("D:\\fruits.jpg");
    if(!src.data)
    {
        printf("No data!--Exiting the program \n");
        return -1;
    }

    tmp = src;
    dst = tmp;
    namedWindow(window_name,CV_WINDOW_AUTOSIZE);
    imshow(window_name,dst);

    while(true)
    {
        int c;
        c = waitKey(10);
        if((char)c == 27)
        {
            break;
        }
        if((char)c == 'u')
        {
            pyrUp(tmp,dst,Size(tmp.cols * 2,tmp.rows * 2));
            printf("** Zoom In:Image x 2\n");
        }
        else if((char)c == 'd')
        {
            pyrDown(tmp,dst,Size(tmp.cols / 2,tmp.rows / 2));
            printf("**Zoom Out:Image / 2\n");
        }
        imshow(window_name,dst);
        tmp = dst;
    }
    return 0;
}

複製程式碼

  程式很簡單,就是直接呼叫Imgproc中的兩個C++函式pyrUp和pyrDown來實現影象金字塔,程式的詳細解釋可參見http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/pyramids/pyramids.html。但在實現的過程中發現imread始終讀取不了影象資料和cvLoadImage卻可以。幾經考證,發現的確是由於庫關聯的問題。也就是在Debug模式下應該選擇帶'd'的lib,在Release模式下就選擇不帶'd'的lib。而實際我們在配置OpenCV環境的時候往往圖方便將Debug和Release的目錄都一起加了進去,再修改起來也比較麻煩。所以這時候最簡單的辦法就是在程式的開始加上:

#pragma comment(lib,"opencv_highgui231d.lib")

來告訴程式將採用Debug版本的庫函式。   實驗結果如下:

 ( x 2) (x 1)(x 0.5)(x 0.25)