OpenCV中C++函式imread讀取圖片的問題
阿新 • • 發佈:2018-12-09
#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)