首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

OpenCV 圖片讀取:`imread("path")` vs `imread(argv[1])` 區別詳解

     編輯:程式設計綜合問答

兩種寫法本質區別

寫法圖片路徑來源適用場景執行方式
`imread("C:/img.jpg")`代碼**硬編碼**死路徑快速測試、固定輸入IDE 直接 Run / 雙擊 exe
`imread(argv[1])`**命令行參數**傳入生產部署、批量處理、腳本調用終端 `./app image.jpg`

命令行參數機制深度解析

main 函數簽名

int main(int argc, char* argv[]) 
// 或 int main(int argc, char** argv)
  • `argc` (argument count):參數**個數**,含程序名本身,故 `argc ≥ 1`。
  • `argv` (argument vector):字符串指針數組。
    • `argv[0]`:程序名稱(含路徑)。
    • `argv[1]`:第一個用戶參數。
    • `argv[argc-1]`:最後一個參數。
    • `argv[argc]`:保證為 `NULL`。

實際運行示例

# 編譯
g++ main.cpp -o viewer `pkg-config --cflags --libs opencv4`

# 運行:傳入圖片路徑作為第一個參數
./viewer /home/user/photos/selfie.png

# 程序內 argc=2, argv[0]="./viewer", argv[1]="/home/user/photos/selfie.png"

完整健壯代碼模板

#include 
#include 

int main(int argc, char** argv) {
    // 1. 參數檢查
    if (argc != 2) {
        std::cerr << "Usage: " << argv[0] << " \n";
        return -1;
    }
    
    // 2. 讀取圖片(第二個參數 1 表示彩色載入,默認即為 1)
    cv::Mat img = cv::imread(argv[1], cv::IMREAD_COLOR);
    if (img.empty()) {
        std::cerr << "Error: Could not open or find image: " << argv[1] << "\n";
        return -1;
    }
    
    // 3. 顯示
    cv::namedWindow("Image Viewer", cv::WINDOW_AUTOSIZE);
    cv::imshow("Image Viewer", img);
    cv::waitKey(0); // 等待按鍵退出
    return 0;
}

Visual Studio 設置命令行參數

  1. 專案右鍵 → **Properties** (屬性)
  2. **Configuration Properties** → **Debugging** → **Command Arguments**
  3. 輸入:`"C:\path\to\your\image.jpg"` (含引號防空格)
  4. F5 調試運行,`argv[1]` 即為該路徑。

進階:支持多圖片批量處理

int main(int argc, char** argv) {
    if (argc < 2) { /* usage */ }
    for (int i = 1; i < argc; i++) {
        cv::Mat img = cv::imread(argv[i]);
        if (img.empty()) continue;
        // 處理每張圖片...
        std::string out = "processed_" + std::string(argv[i]);
        cv::imwrite(out, img);
    }
    return 0;
}

運行:`./batch_proc img1.jpg img2.png img3.bmp`

原回答補充

原最佳回答詳細講解了 `argc/argv` 機制並給出 TC3.0 示例,上文補充現代 C++/OpenCV 專用模板、VS 設置方法、批量處理擴展,更針對開發場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved