python - 从图像中检测圆并裁剪检测到的ROI python

标签 python opencv image-processing python-imaging-library

我有一个图像,我想在该图像中提取一个圆形的感兴趣区域
然后种植它。
我已经做了一些预处理,我正在共享结果和代码。
请让我知道我如何实现这一目标。

import imutils
import cv2
import numpy as np

#edge detection
image = cv2.imread('newimage.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = cv2.GaussianBlur(image, (5, 5), 0)
canny = cv2.Canny(image, 30, 150)

#circle detection
img = cv2.medianBlur(image,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(canny,cv2.HOUGH_GRADIENT,1,20,
                            param1=50,param2=30,minRadius=0,maxRadius=0)

circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    #outer circle
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    #center of the circle
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

plt.title('Circle Detected')
plt.xticks([])
plt.yticks([])    
plt.imshow(cimg,cmap = 'gray')
plt.show()

最佳答案

在您的示例中,您应该获得最大半径为i[2]的圆

max_circle = max(circles[0,:], key=lambda x:x[2])

print(max_circle)

i = max_circle
#outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
#center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

关于python - 从图像中检测圆并裁剪检测到的ROI python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59194838/

相关文章:

c++ - 速度——在 C++ 中嵌入 Python 或使用 C++ 扩展 Python

xcode - 如何在 Xcode 中禁用静态框架的警告?

opencv - Caffe 构建反复失败

c++ - Opencv从多个摄像机捕获视频

c# - 速度 - 将位图数据复制到数组中还是直接使用它?

c# - 使用 EMGU CV C# 中的 HOGDescriptor 获取图像的 HOG 描述符

python - 从 sprites.Group() 中删除/移除前 N 或最后 N

Python 嵌入式 C++

python - 将 DataFrame 与 Pandas 中的 Series 连接起来

matlab - 更改插值 RGB 图像的图像长宽比。正方形到长方形