对“判断内六角规格项目”一些改进与完善

总结写在开头:

1、边缘检测不但是只有canny,还有其他的(当然最后发现还是canny比较优秀)

2、滤波有很多种,不但是blur均值滤波

以上以后具体案例都要尝试一下,寻找最佳算法函数

3、奇葩的事,我最后放弃边缘检测,直接使用的houghcirles,检测出来的效果更好,这算是个经验吧,以后可以尝试这种办法,不一定是固守原来的规则。

4、houghcircles的累加器参数也挺重要的,数值越大判断越粗糙,

5、放弃了相机标定remap。

6、一开始检测出来的圆没有完全拟合边界,想通过检测椭圆来试试。但是转念一想,我的相机和拍摄的物品是水平的,“”“椭圆率”几乎为零,它拍出来的肯定是个比较理想的圆。

7、最重要的一点是,我更换了打光方式,选择了背光!

最后M6的螺栓头,标准尺寸是10mm,检测结果为10.0002。

 

#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"
#include <iostream>


using namespace cv;
using namespace std;



//修复图像畸变

void main()
{
	Mat src_image,dst_image;
	src_image = imread("1.jpg", 0);
	src_image = src_image(Rect(720, 470, 200, 200));
	
	//为标准1元硬币图像半径值与实际半径值的比值
	double trueDistance;

	//均值滤波
	blur(src_image, src_image, Size(3, 3));

	//开运算  
	Mat ele = getStructuringElement(MORPH_RECT, Size(8, 8));
	morphologyEx(src_image, src_image, MORPH_OPEN, ele);
	namedWindow("开运算", WINDOW_NORMAL);
	imshow("开运算", src_image);

	//圆型检测
	vector<Vec3f>circles;
	HoughCircles(src_image, circles, CV_HOUGH_GRADIENT, 2, 600, 100, 100, 0,300);
	printf("圆的个数为%d", circles.size());

	//画圆形
	unsigned int a = 0;
	for (a; a< circles.size(); a++)
	{
		Point center(cvRound(circles[a][0]), cvRound(circles[a][1]));
		int radius = cvRound(circles[a][2]);

		circle(src_image, center, 3, Scalar(0, 255, 0), -1, 8, 0);
		circle(src_image, center, radius, Scalar(255, 134, 0), 3, 8, 0);

		printf("\n圆的半径大小为 %d", radius);

		//比例换算
		trueDistance = radius * 0.07143*2;

		//判断是什么规格螺栓
		switch (cvRound(trueDistance))
		{
		case 6:
			printf("\n螺栓规格为M3");
			break;
		case 7:
			printf("\n螺栓规格为M4");
			break;
		case 9:
			printf("\n螺栓规格为M5");
			break;
		case 10:
			printf("\n螺栓规格为M6");
			break;
		case 13:
			printf("\n螺栓规格为M8");
			break;
		case 16:
			printf("\n螺栓规格为M10");
			break;
		}

		//输出半径大小
		printf("\n圆的实际半径大小为 %lf", trueDistance);

	}
	namedWindow("画圆形", WINDOW_NORMAL);
	imshow("画圆形", src_image);

	waitKey(0);
}

下面我会开始学习算法了,即去深入学习houghcircles.cpp文件了,对自己的C++编程能力进行一次提升!

最后的话:两个项目下来,结合机器视觉的数据,我对光源选择、图像预处理、特征检测有了基础的了解与实践。对于机器视觉也有了更深的了解。下面我会开始投递简历,通过面试加深这个行业的需求,以及了解自身有什么不足,继续学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值