| 寫法 | 圖片路徑來源 | 適用場景 | 執行方式 |
|---|---|---|---|
| `imread("C:/img.jpg")` | 代碼**硬編碼**死路徑 | 快速測試、固定輸入 | IDE 直接 Run / 雙擊 exe |
| `imread(argv[1])` | **命令行參數**傳入 | 生產部署、批量處理、腳本調用 | 終端 `./app image.jpg` |
int main(int argc, char* argv[])
// 或 int main(int argc, char** argv)
# 編譯
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;
}
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 設置方法、批量處理擴展,更針對開發場景。