精华内容
下载资源
问答
  • opencv识别圆形

    千次阅读 2017-08-20 22:21:15
    关于opencv的配置,在这里...这篇博客主要讲述利用opencv对摄像头读取的图像进行识别,并输出圆心,由于采取非机器学习的方法,所以在识别的精度上有所欠缺,日后再做修改。 #include #include #include using


    关于opencv的配置,在这里暂且不说,如果不明白可查看以下博客,

    http://www.cnblogs.com/linshuhe/p/5764394.html

    这篇博客主要讲述利用opencv对摄像头读取的图像进行识别,并输出圆心,由于采取非机器学习的方法,所以在识别的精度上有所欠缺,日后再做修改。


    #include <opencv2/opencv.hpp>
    
    #include <opencv2/imgproc/imgproc.hpp>
    
    #include <iostream>
    
    using namespace cv;
    
    using namespace std;
    
    int main()
    
    {
    
    	//打开摄像头
    
    	VideoCapture capture(0);
    
    	Mat frame;
    
    
    	while (1) {
    
    		capture >> frame; //读入每一帧
    		if (!frame.data)
    			return -1;
    
    		Mat midImage;
    
    		cvtColor(frame, midImage, CV_BGR2GRAY);  //转换为灰度图
    		GaussianBlur(midImage, midImage, Size(9, 9), 2, 2); //进行高斯模糊
    
    		vector<Vec3f> circles;
    
    		HoughCircles(midImage, circles, CV_HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0);  //运用霍夫变换识别圆
    
    		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]);
    
    			circle(frame, center, radius, Scalar(155, 50, 255), 3, 8, 0); //绘制圆的边缘
    
    
    			printf("x = %d,y = %d\n", cvRound(circles[i][0]), cvRound(circles[i][1])); //输出圆心坐标
    
    			Vec3b& temp = frame.at<Vec3b>(cvRound(circles[i][0]), cvRound(circles[i][1])); //提取圆心的颜色rgb值
    			printf("B = %d G=%d R=%d\n", temp.val[0], temp.val[1], temp.val[2]);
    
    		}
    
    		namedWindow("效果");
    
    		imshow("效果", frame);
    
    		waitKey(30);
    	}
    	
    	return 0;
    
    }


    展开全文
  • [b]我的问题[/b]:我想把一副足球场上比赛的足球获取出来,如下图 ... [b]我的解决思路:[/b] ... 我刚刚学图像处理对其中原理还不是很懂,各位谁能给个识别这张图片中足球的代码,小弟感激不尽~~
  • python+opencv 识别圆形物体并将图像抠出

    千次阅读 多人点赞 2020-06-12 20:19:57
    源码: import cv2 import numpy as np import math def seg_circle(img): h, w = img.shape[:2] result = np.zeros([h, w, 3]) circles = detect_circle(img) print(circles) print("圆心:", circles[0][0]...

    源码:

    import cv2
    import numpy as np
    import math
    
    
    def seg_circle(img):
        h, w = img.shape[:2]
        result = np.zeros([h, w, 3])
        circles = detect_circle(img)
        print(circles)
        print("圆心:", circles[0][0], circles[0][1])
        print("半径:", circles[0][2])
        for i in range(w):
            for j in range(h):
                if distance(i, j, circles[0][1], circles[0][0]) < circles[0][2]:
                    result[i][j][:] = img[i][j][:]
        cv2.imwrite('result.jpg', result)
    
    
    def detect_circle(img):
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        gaussian = cv2.GaussianBlur(gray, (3, 3), 0)
        circles1 = cv2.HoughCircles(gaussian, cv2.HOUGH_GRADIENT, 1, 100, param1=200, param2=30, minRadius=0, maxRadius=0)
        circles = circles1[0, :, :]
        circles = np.uint16(np.around(circles))
        return circles
    
    
    def distance(x1, y1, x2, y2):
        return math.sqrt((x1-x2)**2 + (y1 - y2)**2)
    
    
    img = cv2.imread('timg.jpg')
    seg_circle(img)
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 基于opencv圆形识别

    2013-03-06 09:11:48
    基于opencv圆形识别 使用了霍夫方法 希望有所帮助
  • 对于圆形物体识别问题,opencv提供了大量方法。(代码文末附上)二.检测步骤:2.1读取图像窗口1(初始图像未经过处理)2.2降噪处理利用降噪方法cv2.blur(img, (5,5))其中两个参数为横向纵向的模糊程度,数值越大越...

    一.简介:

    初次使用python的你一定感受到了python的便捷。作为高级编程语言只需调用类库即可。

    对于圆形物体识别问题,opencv提供了大量方法。

    (代码文末附上)

    二.检测步骤:

    2.1读取图像

    窗口1(初始图像未经过处理)

    1225041-20180207101549841-606248106.png

    2.2降噪处理

    利用降噪方法cv2.blur(img, (5,5))

    其中两个参数为横向纵向的模糊程度,数值越大越模糊

    这是5,5的模糊程度

    1225041-20180207101600591-255589360.png

    这是20,20的模糊程度

    1225041-20180207101612591-2131733149.png

    这里我们用5,5效果测试下来最佳

    2.3灰度化

    灰度化常用于色彩丰富的图像,类似ps中的失色操作。

    方法:cv2.cvtColor(result,cv2.COLOR_BGR2GRAY)

    1225041-20180207101631466-34011003.png

    由于原图像就是黑白主色调,所以去色改变不大

    2.4霍夫变化圆检测

    之前的降噪和灰度化都是为了这一步的检测

    方法如下:

    cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,50,param1=80,param2=30,minRadius=15,maxRadius=20)

    参数1 image:传递图像

    参数2 method:默认,不用理解

    参数3 dp:默认,不用理解

    参数4 minDist:不同圆心的最小距离,单位为像素

    参数5 涉及到Canny算法,这里的80为canny算法的上限,这里的canny算法下限自动设置为为上限一半,马上介绍canny算法

    参数6 需要理解上面的参考文章,可以认为是需要达到的累加数量

    参数7,8 为最小半径和最大半径,避免识别白色的圆圈

    1225041-20180207101902295-1637903579.png

    那么什么是canny算法呢?简单来说就是边缘检测算法

    具体实现效果可以参考方法:cv2.Canny(img, 27, 54),显示效果为

    1225041-20180207101849279-1606483394.png

    加大参数边缘就越少,我们用到的就是这种效果,即设置上限为80

    cv2.Canny(img, 40, 80)

    1225041-20180207101806998-1936958142.png

    最终

    circles=cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,50,param1=80,param2=30,minRadius=15,maxRadius=20)

    会将所有识别的圆形参数(圆心位置,半径)保存到circles

    可以认为是一个数组中

    2.5标记

    根据2.4获取的图像信息利用cv2.circle()方法进行圈画

    1225041-20180207101927951-71848657.png

    大功告成,可以调整参数达到满意的效果。

    三.附上代码

    # -*- coding: utf-8 -*-

    import cv2

    #载入并显示图片

    img=cv2.imread('1.jpg')

    cv2.imshow('1',img)

    #降噪(模糊处理用来减少瑕疵点)

    result = cv2.blur(img, (5,5))

    cv2.imshow('2',result)

    #灰度化,就是去色(类似老式照片)

    gray=cv2.cvtColor(result,cv2.COLOR_BGR2GRAY)

    cv2.imshow('3',gray)

    #param1的具体实现,用于边缘检测

    canny = cv2.Canny(img, 40, 80)

    cv2.imshow('4', canny)

    #霍夫变换圆检测

    circles= cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,50,param1=80,param2=30,minRadius=15,maxRadius=20)

    #输出返回值,方便查看类型

    print(circles)

    #输出检测到圆的个数

    print(len(circles[0]))

    print('-------------我是条分割线-----------------')

    #根据检测到圆的信息,画出每一个圆

    for circle in circles[0]:

    #圆的基本信息

    print(circle[2])

    #坐标行列(就是圆心)

    x=int(circle[0])

    y=int(circle[1])

    #半径

    r=int(circle[2])

    #在原图用指定颜色圈出圆,参数设定为int所以圈画存在误差

    img=cv2.circle(img,(x,y),r,(0,0,255),1,8,0)

    #显示新图像

    cv2.imshow('5',img)

    #按任意键退出

    cv2.waitKey(0)

    cv2.destroyAllWindows()

    展开全文
  • 主要为大家详细介绍了python+opencv识别图片中的圆形,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • opencv边缘检测实时识别圆形

    千次阅读 2019-03-01 13:26:01
    opencv识别圆形 opencv有内置函数可以识别物体形状,仅仅需要几行代码就能实现圆形实时检测 用opencv抓取摄像头图像 import cv2 # 载入opencv库 cap = cv2.VideoCapture(0) # 此处cap即摄像头变量;内置摄像头为0,...

    opencv识别圆形

    opencv有内置函数可以识别物体形状,仅仅需要几行代码就能实现圆形实时检测

    用opencv抓取摄像头图像

    import cv2  # 载入opencv库
    cap = cv2.VideoCapture(0)  # 此处cap即摄像头变量;内置摄像头为0,若有其他摄像头则依次为1,2,3,4,…
    print(cap.isOpened())  # 检查摄像头是否处于打开状态,返回布尔值
    cap.set(3, 640)
    cap.set(4, 480)  # 设置摄像头拍摄的图像像素
    while Ture:  # 写成死循环,使一直抓取摄像头图像
    	ret, img = cap.read()  # 布尔变量,图像变量 = 摄像头变量.read();布尔变量为True,代表读取成功,False代表读取失败;读取的图像存储在img变量中
    	cap.release()  # 关闭摄像头
    	if cv2.waitKey(25) & 0xFF == ord('q'):
    		break
    

    用HoughCircles(霍夫圆)检测圆形

    OpenCV使用了霍夫梯度法这个巧妙的方法,来使用边界的梯度信息,从而提升计算的效率。

    cv2中进行霍夫圆环检测的函数:
    cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)
    其中:
    image:8位,单通道图像。如果使用彩色图像,需要先转换为灰度图像。
    method:定义检测图像中圆的方法。目前唯一实现的方法是cv2.HOUGH_GRADIENT。
    dp:累加器分辨率与图像分辨率的反比。dp获取越大,累加器数组越小。
    minDist:检测到的圆的中心,(x,y)坐标之间的最小距离。如果minDist太小,则可能导致检测到多个相邻的圆。如果minDist太大,则可能导致很多圆检测不到。
    param1:用于处理边缘检测的梯度值方法。
    param2:cv2.HOUGH_GRADIENT方法的累加器阈值。阈值越小,检测到的圈子越多。
    minRadius:半径的最小大小(以像素为单位)。
    maxRadius:半径的最大大小(以像素为单位)。

    import mtplotlib.pyplot as plt
    gray = cv2.cvtColor(img, icv2.COLOR_BGR2GRAY)  # 灰度图像;opencv中有多种色彩空间,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8种,使用中经常要遇到色彩空间的转化,以便生成mask图等;
    circles1 = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 150, param1=100, param2=60, minRadius=50, maxRadius=20000)
    circles = circles1[0, :, :]  # 提取为二维
    circles = np.uint16(np.around(circles))  # 四舍五入,取整
    for i in circles[:]:
        cv2.circle(img, (i[0], i[1]), i[2], (255, 0, 0), 5)  # 画圆
        cv2.circle(img, (i[0], i[1]), 2, (255, 0, 0), 10)  # 画圆心
        print('圆心坐标:\t', i[0], i[1])
    plt.imshow(img)
    plt.show()
    

    完整代码

    import cv2  # 载入opencv库
    import mtplotlib.pyplot as plt
    cap = cv2.VideoCapture(0)  # 此处cap即摄像头变量;内置摄像头为0,若有其他摄像头则依次为1,2,3,4,…
    print(cap.isOpened())  # 检查摄像头是否处于打开状态,返回布尔值
    cap.set(3, 640)
    cap.set(4, 480)  # 设置摄像头拍摄的图像像素
    while Ture:  # 写成死循环,使一直抓取摄像头图像
    	ret, img = cap.read()  # 布尔变量,图像变量 = 摄像头变量.read();布尔变量为True,代表读取成功,False代表读取失败;读取的图像存储在img变量中
    	gray = cv2.cvtColor(img, icv2.COLOR_BGR2GRAY)  # 灰度图像;opencv中有多种色彩空间,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8种,使用中经常要遇到色彩空间的转化,以便生成mask图等;
    	circles1 = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 150, param1=100, param2=60, minRadius=50, maxRadius=20000)
    	circles = circles1[0, :, :]  # 提取为二维
    	circles = np.uint16(np.around(circles))  # 四舍五入,取整
    	for i in circles[:]:
        	cv2.circle(img, (i[0], i[1]), i[2], (255, 0, 0), 5)  # 画圆
        	cv2.circle(img, (i[0], i[1]), 2, (255, 0, 0), 10)  # 画圆心
        	print('圆心坐标:\t', i[0], i[1])
    	plt.imshow(img)
    	plt.show()
    	# cap.release()  # 关闭摄像头
    	if cv2.waitKey(25) & 0xFF == ord('q'):
    		break
    
    展开全文
  • 主要介绍了详解利用python+opencv识别图片中的圆形(霍夫变换),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 在图片中识别足球先补充下霍夫圆变换的几个参数知识:dp,用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像分辨率低的累加器。上述文字不好理解的话,来看例子吧。例如,如果...
  • 学习opencv——如何识别圆形

    万次阅读 多人点赞 2016-08-14 14:37:40
    最近在学习OpenCV,OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,拥有丰富的图像处理和计算机...更简单的python版本:识别圆形(python版) ...
  • opencv 识别圆心

    2012-10-09 10:28:16
    opencv 识别圆心
  • 详详解解利利用用python+opencv识识别别图图片片中中的的圆圆形形 霍霍夫夫变变换换 这篇文章主要介绍了详解利用python+opencv识别图片中的圆形 霍夫变换文中通过示例代码介绍的非常详 细对大家的学习或者工 具有...
  • opencv 识别圆环

    2020-11-15 16:57:07
    利用opencv识别圆环找出圆心方法思路涉及到的opencv方法关键代码效果实现总结 方法思路 大概的流程就是: 先对图像去噪声 识别出轮廓 找出自己想要的轮廓(重点) 涉及到的opencv方法 1 cv::GaussianBlur...
  • opencv圆形检测

    2020-09-18 22:18:32
    需求: 找出下图中的圆形. 如果直接用霍夫圆检测 的话,效果很差. 代码: #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat frame = ...
  • python opencv 霍夫圆变换
  • OpenCV识别形状

    千次阅读 2019-03-27 20:29:16
    利用opencv识别图片中的矩形 其中遇到的问题主要是识别轮廓时矩形内部的形状导致轮廓不闭合。 1. 对输入灰度图片进行高斯滤波 2. 做灰度直方图,提取阈值,做二值化处理 3. 提取图片轮廓 4. 识别图片中的矩形 5. ...
  • 图像处理之opencv识别图片和视频中人脸

    千次阅读 多人点赞 2020-01-27 13:10:59
    1、opencv识别单张人脸 1.1、读取图片 1.2、识别人脸 1.2.1、下载人脸识别算法 1.2.2、人脸检测 2、opencv识别多张人脸 2.1、导入计算机视觉库opencv和人脸识别算法 2.2、读入并展示图片 2.3、图片灰色处理 2.4、...
  • 如何用opencv识别摄像头捕获视屏流中的圆形并且输出圆心坐标,弄了好久也只能实现捕获一个圆而不能同时捕获几个圆,求程序指导

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,239
精华内容 1,295
关键字:

opencv识别圆形