2012-07-26 191 views
2

在我正在進行項目時,我注意到我無法加載圖像。這裏是我用來檢查的簡單代碼:OpenCV無法加載圖像

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/objdetect/objdetect.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <iostream> 

using namespace cv; 
using namespace std; 

int main(int argc, char** argv) 
{ 
    if(argc != 2) 
    { 
    cout <<" Usage: display_image ImageToLoadAndDisplay" << endl; 
    return -1; 
    } 

    Mat image; 
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // Read the file 

    if(! image.data)        // Check for invalid input 
    { 
     cout << "Could not open or find the image" << std::endl ; 
     return -1; 
    } 

    Mat gray_image; 
    cv::cvtColor(image, gray_image, CV_RGB2GRAY); 

    imwrite("Gray_Image.jpg",gray_image); 

    return 0; 
} 

下面是它的輸出,當我執行它:

[email protected]:~# ./tryit lena.jpg 
Could not open or find the image 

我試圖直接使用圖像的地址(「/家/根/lena.jpg「)而不是argv [1],但沒有任何改變。

可能是什麼問題?

ps:我正在交叉編譯這個OpenCV程序,然後在安裝了Angstrom Linux的BeagleBone上運行它。這個問題可以與它相關嗎?

+0

您的Angstrom Linux安裝有可能不支持JPEG文件的OpenCV設置。你可以使用'fopen'之類的東西來確保你可以訪問文件,並且可以在BeagleBone上查找JPEG庫嗎? – 2012-07-26 10:17:07

+0

@RajeshJAdvani我打開它與fopen並檢查它是否爲NULL,它不是。所以我沒有任何問題訪問文件。順便說一下,我的Angstrom Linux上沒有OpenCV設置。我使用OpenCV庫交叉編譯PC上的程序,這些庫也是爲ARM Cortex A8交叉編譯的,然後在我的beaglebone上執行。 – 2012-07-26 12:29:51

+0

@RajeshJAdvani我開始認爲這個問題與我的OpenCV庫有關。也許我無法成功交叉編譯它們。如果是這樣的話,我可以通過下面的方法搞清楚:我可以發送一個字節數組而不是圖像,然後讓OpenCV處理它。你有一個想法如何將圖片轉換爲字節數組? – 2012-07-26 12:57:14

回答

1

我解決了我的問題,刪除了我的埃格爾圖像上的現有OpenCV庫,並用工作的圖像替換它們。

0

嘗試使用PNG擴展名保存圖像,然後打開它。出於某種原因,帶有png擴展名的文件比jpg/gif等其他擴展名的效果更好。