您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何解決OpenCV中C++函數imread讀取圖片的問題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何解決OpenCV中C++函數imread讀取圖片的問題”這篇文章吧。
今天在用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來實現圖像金字塔,程序的詳細解釋可參見https://www.jb51.net/article/108378.htm。但在實現的過程中發現imread始終讀取不了圖像數據和cvLoadImage卻可以。幾經考證,發現的確是由于庫關聯的問題。也就是在Debug模式下應該選擇帶'd'的lib,在Release模式下就選擇不帶'd'的lib。而實際我們在配置OpenCV環境的時候往往圖方便將Debug和Release的目錄都一起加了進去,再修改起來也比較麻煩。所以這時候最簡單的辦法就是在程序的開始加上:
#pragma comment(lib,"opencv_highgui231d.lib")
來告訴程序將采用Debug版本的庫函數。
實驗結果如下:
以上是“如何解決OpenCV中C++函數imread讀取圖片的問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。