今天在用OpenCV實驗Image Pyramid的時候發現一個奇怪的問題,就是利用C++函數imread讀取圖片的時候返回的結果總是空,而利用C函數cvLoadImage時卻能讀取到圖像。代碼如下:
//環境:VS2010 + OpenCV 2.3.1#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.49028c.com/kaifa/c/240976.html。但在實現的過程中發現imread始終讀取不了圖像數據和cvLoadImage卻可以。幾經考證,發現的確是由于庫關聯的問題。也就是在Debug模式下應該選擇帶'd'的lib,在Release模式下就選擇不帶'd'的lib。而實際我們在配置OpenCV環境的時候往往圖方便將Debug和Release的目錄都一起加了進去,再修改起來也比較麻煩。所以這時候最簡單的辦法就是在程序的開始加上:
#pragma comment(lib,"opencv_highgui231d.lib")
來告訴程序將采用Debug版本的庫函數。
實驗結果如下:
以上所述是小編給大家介紹的OpenCV中C++函數imread讀取圖片的問題及解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!
新聞熱點
疑難解答