原因:圖片路徑
//一段簡單的OPENCV測試程序
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main() {
// 讀入一張圖片(遊戲原畫)
Mat img = imread("1.jpg");
// 創建一個名爲 "遊戲原畫"窗口
namedWindow("遊戲原畫");
// 在窗口中顯示遊戲原畫
imshow("遊戲原畫", img);
// 等待6000 ms後窗口自動關閉
waitKey(6000);
}
卻出現以下的報錯。
可能是imread(“pic.jpg”);的路徑問題,把路徑打全。而且注意左右斜槓,如果我們將imread(“C:\Users\Administrator\Desktop\圖庫\a.jpg”)改爲imread(“C:\Users\Administrator\Desktop\圖庫\a.jpg”)或者imread(“C:/Users/Administrator/Desktop/圖庫/a.jpg”)問題就解決了。
最後查了一下資料是這樣解釋的:
在C裏面,輸出字符串時,如果想輸出一個換行,那就要加上’\n’這個標誌,類似的,輸出一個TAB,就加上’\t’,也就是說,反斜槓("")這個符號會把跟在它後面的字符結合起來轉義成其它字符。根據這個原理,如果想輸出雙引號(’"’),就需要輸入’"’,這樣纔會將包含了雙引號的字符串正確的寫入內存中。那麼如果想輸入一個反斜槓呢?很簡單,只要敲’\'就可以了。
如果"C:\Windows\System"這個路徑字符串交給C編譯器編譯,實際寫入內存的字符串並沒有包含反斜槓"",甚至緊跟在反斜槓後面的字母也一起被轉義成了其它的字符,再次調用的話勢必會出問題。
//修改代碼如下
int main() {
// 讀入一張圖片(遊戲原畫),路徑設置爲絕對路徑
Mat img = imread("G:/Workspace/VisualStudioWorkspace/TestOpencv/testopencv/1.jpg");
//絕對路徑也可以如下設置
//Mat img = imread("G:\\Workspace\\VisualStudioWorkspace\\TestOpencv\\testopencv\\1.jpg");
// 創建一個名爲 "遊戲原畫"窗口
namedWindow("遊戲原畫");
// 在窗口中顯示遊戲原畫
imshow("遊戲原畫", img);
// 等待6000 ms後窗口自動關閉
waitKey(6000);
//cout << "heloo" << endl;
}