日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用opencv霍夫变检测中国象棋的外形——圆

發布時間:2024/3/26 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用opencv霍夫变检测中国象棋的外形——圆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天將opencv的霍夫變換修改并優化了一下,就是先預處理,切割、二值化、去噪之后進行霍夫變換,效果還不錯,從識別70多個圓,慢慢修改到識別32個圓。
效果如下:

原理毛星云寫的就很好,他的文章鏈接:https://blog.csdn.net/poem_qianmo/article/details/26977557
下面附上代碼:

#include "stdafx.h" #include "core/core.hpp" #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <set> #include<stdio.h>#include <opencv2/core.hpp> #include <opencv2/opencv.hpp> #include <opencv2/highgui.hpp> #include <opencv2/videoio.hpp>//for camera #include <opencv2/video.hpp> #include <opencv2/ml/ml.hpp> #include "opencv2/ml/ml.hpp" #include <time.h> #include <ctime> #include <string> using namespace std; using namespace cv; //-----------------------------------【命名空間聲明部分】--------------------------------------- // 描述:包含程序所使用的命名空間 //----------------------------------------------------------------------------------------------- //-----------------------------------【main( )函數】-------------------------------------------- // 描述:控制臺應用程序的入口函數,我們的程序從這里開始 //----------------------------------------------------------------------------------------------- int main() {//【1】載入原始圖和Mat變量定義 Mat srcImage = imread("3.jpg"); //工程目錄下應該有一張名為1.jpg的素材圖 Mat midImage, dstImage;//臨時變量和目標圖的定義 //【2】顯示原始圖 namedWindow("【原始圖】", 0);//參數為零,則可以自由拖動imshow("【原始圖】", srcImage);Rect rect(600, 0, 1205, 1035); //創建一個Rect框,屬于cv中的類,四個參數代表x,y,width,height Mat image_cut = Mat(srcImage, rect); //從img中按照rect進行切割,此時修改image_cut時image中對應部分也會修改,因此需要copy Mat image_copy = image_cut.clone(); //clone函數創建新的圖片 namedWindow("分割后的圖片", 0);//參數為零,則可以自由拖動imshow("分割后的圖片", image_copy);//【3】轉為灰度圖,進行圖像平滑 cvtColor(image_copy, midImage, CV_BGR2GRAY);//灰度化//二值化threshold(midImage, midImage, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);//使用3*3內核來降噪blur(midImage, midImage, Size(3, 3));//進行模糊//GaussianBlur(midImage, midImage, Size(9, 9), 2, 2);//Rect rect(600,0, 1205, 1035); //創建一個Rect框,屬于cv中的類,四個參數代表x,y,width,height //Mat image_cut = Mat(midImage, rect); //從img中按照rect進行切割,此時修改image_cut時image中對應部分也會修改,因此需要copy //Mat image_copy = image_cut.clone(); //clone函數創建新的圖片 //namedWindow("分割后的圖片", 0);//參數為零,則可以自由拖動//imshow("分割后的圖片", image_copy);//【4】進行霍夫圓變換 vector<Vec3f> circles; // HoughCircles(midImage, circles, CV_HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0);// 第五個參數 圓的圓心之間的最小距離HoughCircles(midImage, circles, CV_HOUGH_GRADIENT, 1.5, 35, 100, 25, 36, 43);//【5】依次在圖中繪制出圓 for (size_t i = 0; i < circles.size(); i++){Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));int radius = cvRound(circles[i][2]);cout << "圓心 " << i << "= " << center << ";\n" << endl;cout << "半徑= " << i << "= " << radius << ";\n" << endl;//繪制圓心 circle(midImage, center, 3, Scalar(0, 255, 0), -1, 8, 0);//繪制圓輪廓 circle(midImage, center, radius, Scalar(155, 50, 255), 3, 8, 0);//繪制圓心 circle(image_copy, center, 3, Scalar(0, 255, 0), -1, 8, 0);//繪制圓輪廓 circle(image_copy, center, radius, Scalar(155, 50, 255), 3, 8, 0);}cout << "共檢測到圓" << circles.size() << " 個圓" << ";\n" << endl;//【6】顯示效果圖 namedWindow("【二值化后效果圖】", 0);//參數為零,則可以自由拖動imshow("【二值化后效果圖】", midImage);namedWindow("【彩色效果圖】", 0);//參數為零,則可以自由拖動imshow("【彩色效果圖】", image_copy);waitKey(0);return 0; }

總結

以上是生活随笔為你收集整理的利用opencv霍夫变检测中国象棋的外形——圆的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。