之前为了完成课设学习了一下如何使用opencv进行五子棋棋局处理,但是目前网上关于棋局处理的程序大多使用python语言进行编程,所以本篇博客补充一个使用c++语言和opencv库实现五子棋棋局处理的程序,程序中涉及的图像处理算法有高斯模糊,canny边缘提取(这块使用sobel也可以),霍夫圆检测算法。
此段代码的输入为一张棋局图像,输出为二维矩阵,其中每个位置可以为0(无棋子),1(白棋子),2(黑棋子),程序经过实测可以完成目标任务。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
// 读取棋盘
Mat img = imread("C:/Users/chenr/Desktop/board_process/go1.jpeg");
// 转换为灰度图像
Mat gray;
cvtColor(img, gray, cv::COLOR_BGR2GRAY);
// 高斯模糊
GaussianBlur(gray, gray, cv::Size(5, 5), 0);
// 边缘检测
Mat edges;
Canny(gray, edges, 50, 100, 3, false);
// 轮廓提取
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(edges, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);