基於opencv影象識別的AI五子棋系列1—棋盤預處理

今天開始給大家分享一個基於影象識別的AI五子棋專案,基於c語言開發,使用了opencv影象識別庫,sdk使用vs2015。該文章是該系列的第一篇文章。透過該系列文章,你可以進階opencv影象識別,熟悉影象識別與處理的大致流程,熟悉AI智慧……

在開始第一章節前,先做一個整體的預覽,程式碼思路以及每個過程的效果圖:

基於opencv影象識別的AI五子棋系列1—棋盤預處理

原圖

基於opencv影象識別的AI五子棋系列1—棋盤預處理

二值化影象

基於opencv影象識別的AI五子棋系列1—棋盤預處理

尋找棋盤最外邊輪廓1

基於opencv影象識別的AI五子棋系列1—棋盤預處理

尋找棋盤最外邊輪廓2

基於opencv影象識別的AI五子棋系列1—棋盤預處理

尋找棋盤角點

基於opencv影象識別的AI五子棋系列1—棋盤預處理

尋找棋盤角點

基於opencv影象識別的AI五子棋系列1—棋盤預處理

尋找棋盤角點

基於opencv影象識別的AI五子棋系列1—棋盤預處理

基於opencv影象識別的AI五子棋系列1—棋盤預處理

基於opencv影象識別的AI五子棋系列1—棋盤預處理

基於opencv影象識別的AI五子棋系列1—棋盤預處理

基於opencv影象識別的AI五子棋系列1—棋盤預處理

識別最終效果圖

有了整體思路的瞭解,我們進入今天正題,先進行影象的預處理,方便檢測棋盤輪廓。

效果圖

首先讀取原圖

Mat srcImage0 = imread(“1。jpg”);//讀取圖片

灰度化

cvtColor(srcImage0, srcImage1, CV_BGR2GRAY);

二值化

srcImage = srcImage1 > 150; // 二值化

經過上述三個步驟處理,我們基本完成了影象的預處理。下面放一下效果圖:

基於opencv影象識別的AI五子棋系列1—棋盤預處理

灰度化

基於opencv影象識別的AI五子棋系列1—棋盤預處理

二值化

原始碼

/*****************************************************************************************1、五子棋棋盤棋子識別檢測——灰度化,二值化*****************************************************************************************/#include#include #include #include //srand()和rand()函式 #include //time()函式 #include #include #include #include #include #include#include #includeusing namespace std;using namespace cv;using namespace ml;int main(){ float ret = 0; Mat srcImage0 = imread(“1。jpg”);//讀取圖片 //Mat srcImage0 = imread(“app/1。jpg”);//讀取圖片 if (srcImage0。empty()) { cout << “ 待預測影象不存在: ” << endl; printf(“[ALG ERROR][函式:%s][行號:%d],圖片未正常讀取,請檢查輸入路徑十分正確 \n”, __FUNCTION__, __LINE__, 1); cout << “ 待預測影象不存在: ” << endl; } Mat srcImage,srcImage1; resize(srcImage0, srcImage0, Size(1920, 1080)); cvtColor(srcImage0, srcImage1, CV_BGR2GRAY); namedWindow(“灰度化”, 0); imshow(“灰度化”, srcImage1); waitKey(2); srcImage = srcImage1 > 150; // 二值化 namedWindow(“二值化”, 0); imshow(“二值化”, srcImage); waitKey(2); waitKey(0); return 0;}