1. 程式人生 > 其它 >OpenCV 讀取一張圖片並顯示出來

OpenCV 讀取一張圖片並顯示出來

學習內容

利用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的庫不要進行配置或者刪掉,儲存並重新編譯即可。