数字图像处理(DIP)作业9 part-2设计一种快速圆检测算法
2022/1/14 22:33:38
本文主要是介绍数字图像处理(DIP)作业9 part-2设计一种快速圆检测算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
数字图像处理(DIP)作业9 part-2设计一种快速圆检测算法
文章目录
- 数字图像处理(DIP)作业9 part-2设计一种快速圆检测算法
- 要求
- 代码
- 结果
要求
代码
运行环境:Ubuntu16.04 LTS + OpenCV 3.0.4 + ROS-kinetic-full
代码语言:c++
过程:转灰度图->模糊处理->自适应全局阈值二值化处理->
边界检测->霍夫圆检测->绘制图像。
#include <stdlib.h> #include <iostream> #include <opencv2/opencv.hpp> #include<ctime> #define pi 3.14159265 using namespace cv; using namespace std; //基本全局阈值求最佳二值图像 Mat Global_threshold(Mat in){ Mat out=in.clone(); int sum=0; for (int i=0; i<in.rows; i++){ for (int j=0; j<in.cols; j++){ sum+=in.at<uchar>(i,j); } } int t=int(sum/in.cols/in.rows); int u1=0;int u2=255; while((u1+u2)/2-t<=5){ int sum1=0,sum2=0; for (int i=0; i<in.rows; i++){ for (int j=0; j<in.cols; j++){ if(in.at<uchar>(i,j)<t){ sum1+=in.at<uchar>(i,j); }else{ sum2+=in.at<uchar>(i,j); } } } u1=int(sum1/in.cols/in.rows); u2=int(sum2/in.cols/in.rows); t=int((u1+u2)/2); } threshold(in, out, t, 255, CV_THRESH_BINARY); return out; } Mat Fast_circle_detect(Mat in){ Mat out=in.clone(); // imshow("original image",in); //转灰度图像 Mat gray; cvtColor(in, gray, COLOR_BGR2GRAY); //模糊处理 Mat gaussian; GaussianBlur(gray, gaussian, Size(7,7), 0, 0); //自适应全局阈值二值化处理 Mat binary=Global_threshold(gaussian); // imshow("binary",binary); //边缘检测(canny) Mat canny; Canny(gaussian, canny, 100,180);//200,300 // imshow("canny",canny); vector <Vec3f> circles; HoughCircles(canny, circles, HOUGH_GRADIENT, 1, canny.rows/17, 100, 20, 0, 45); for (int i = 0; i < circles.size(); i++) { circle(out, Point(circles[i][0], circles[i][1]), circles[i][2], Scalar(0, 0, 255), 2); } // imshow("circles_detect",out); return out; } int main(int argc, char **argv) { clock_t start,end; double endtime; Mat src,out; start=clock(); src=imread("./src/hw_pkg_9/src/3.jpg"); imshow("original_image_1",src); out=Fast_circle_detect(src); imshow("out_1",out); end=clock(); endtime=(double)(end-start)/CLOCKS_PER_SEC; cout<<"Total_time_1:"<<endtime<<"s"<<endl; start=clock(); src=imread("./src/hw_pkg_9/src/4.png"); imshow("original_image_2",src); out=Fast_circle_detect(src); imshow("out_2",out); end=clock(); endtime=(double)(end-start)/CLOCKS_PER_SEC; cout<<"Total_time_2:"<<endtime<<"s"<<endl; start=clock(); src=imread("./src/hw_pkg_9/src/4.jpg"); imshow("original_image_3",src); out=Fast_circle_detect(src); imshow("out_3",out); end=clock(); endtime=(double)(end-start)/CLOCKS_PER_SEC; cout<<"Total_time_3:"<<endtime<<"s"<<endl; waitKey(0); return 0; }
结果
处理三张图片总用时不到0.3s,且开始运行后处理速度越来越快。且精度较高,识别准确。
这篇关于数字图像处理(DIP)作业9 part-2设计一种快速圆检测算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)