OpenCV 讀取一張圖片並顯示出來
阿新 • • 發佈:2021-07-06
學習內容
利用OpenCV 讀取一張本地圖片並顯示出來。
簡要說明
這是學習OpenCV的一個必備知識,我的學習宗旨是:知道如何去用,才會去了解
程式碼演示
這是一個演示基礎框架
#include <iostream>
#include "opencv2/opencv.hpp"
int main(int argc, char **argv)
{
return 0;
}
開始寫讀取程式碼
#include <iostream> #include "opencv2/opencv.hpp" int main(int argc, char **argv) { cv::Mat src = cv::imread("D:\\workspace\\opencv\\project\\test.png"); if (!src.data) { std::cout << "讀取圖片失敗!" << std::endl; return -1; } else { std::cout << "讀取圖片成功!" << std::endl; } return 0; }
輸入
有時候讀取圖片失敗,首先找是否路徑錯誤等問題,例如寫成路徑是\
#include <iostream> #include "opencv2/opencv.hpp" int main(int argc, char **argv) { cv::Mat src = cv::imread("D:\workspace\opencv\project\test.png"); if (!src.data) { std::cout << "讀取圖片失敗!" << std::endl; return -1; } else { std::cout << "讀取圖片成功!" << std::endl; } return 0; }
輸出
但是,這樣子時候是正確的
#include <iostream> #include "opencv2/opencv.hpp" int main(int argc, char **argv) { cv::Mat src = cv::imread("D:/workspace/opencv/project/test.png"); if (!src.data) { std::cout << "讀取圖片失敗!" << std::endl; return -1; } else { std::cout << "讀取圖片成功!" << std::endl; } return 0; }
輸出
還有 這種也是可能正確
#include <iostream>
#include "opencv2/opencv.hpp"
int main(int argc, char **argv)
{
cv::Mat src = cv::imread("D://workspace//opencv//project//test.png");
if (!src.data)
{
std::cout << "讀取圖片失敗!" << std::endl;
return -1;
}
else
{
std::cout << "讀取圖片成功!" << std::endl;
}
return 0;
}
輸出
開始顯示圖片
#include <iostream>
#include "opencv2/opencv.hpp"
int main(int argc, char **argv)
{
cv::Mat src = cv::imread("D://workspace//opencv//project//test.png");
if (!src.data)
{
std::cout << "讀取圖片失敗!" << std::endl;
return -1;
}
else
{
std::cout << "讀取圖片成功!" << std::endl;
}
cv::namedWindow("src", cv::WINDOW_NORMAL);
cv::imshow("src", src);
cv::waitKey(0);
return 0;
}
輸出一張圖片
這樣子也可以顯示一張圖
#include <iostream>
#include "opencv2/opencv.hpp"
int main(int argc, char **argv)
{
cv::Mat src = cv::imread("D://workspace//opencv//project//test.png");
if (!src.data)
{
std::cout << "讀取圖片失敗!" << std::endl;
return -1;
}
else
{
std::cout << "讀取圖片成功!" << std::endl;
}
//cv::namedWindow("src", cv::WINDOW_NORMAL);
cv::imshow("src", src);
cv::waitKey(0);
return 0;
}
輸出
但,這樣不能正常顯示
#include <iostream>
#include "opencv2/opencv.hpp"
int main(int argc, char **argv)
{
cv::Mat src = cv::imread("D://workspace//opencv//project//test.png");
if (!src.data)
{
std::cout << "讀取圖片失敗!" << std::endl;
return -1;
}
else
{
std::cout << "讀取圖片成功!" << std::endl;
}
//cv::namedWindow("src", cv::WINDOW_NORMAL);
cv::imshow("src", src);
//cv::waitKey(0);
return 0;
}
輸出:
圖片一閃而過就消失了
完整程式碼
#include <iostream>
#include "opencv2/opencv.hpp"
int main(int argc, char **argv)
{
cv::Mat src = cv::imread("D://workspace//opencv//project//test.png");
if (!src.data)
{
std::cout << "讀取圖片失敗!" << std::endl;
return -1;
}
else
{
std::cout << "讀取圖片成功!" << std::endl;
}
cv::namedWindow("src", cv::WINDOW_NORMAL);
cv::imshow("src", src);
cv::waitKey(0);
return 0;
}
輸出:
總結
最容易犯錯的地方就是圖片的路徑。
還有一種錯誤就是,明明路徑都是對的,圖片的真是存在,就是無法讀取到圖片,這種錯誤可能就出現在配置上問題了,解決方式是把配置OpenCV時的不帶d的庫不要進行配置或者刪掉,儲存並重新編譯即可。