基于OpenCV的96孔细胞培养板外边缘圆环检测问题求助
96孔细胞培养板定位问题:广角镜头下Hough Transform误识别孔内边缘
我正在使用OpenCV和Python定位96孔细胞培养板的位置,以实现检测流程自动化。但由于相机配备广角镜头,生成的图像不适用于Hough Transform检测定位孔(圆环)——该函数会将孔的内部识别为圆环。
相关图像
原始图像:

Hough Transform检测结果图(红色点为检测到的圆心,黑色圆环为检测出的圆环):

尝试过的代码
我尝试在使用Hough Transform前将图像转为灰度图,代码如下:
import cv2 import numpy as np import matplotlib.pyplot as plt img_path = "image_path" img = cv2.imread(img_path) # 读取图像 img_height, img_width, img_col_channels = img.shape # 获取图像基本信息 print(img_height, img_width) gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # blurred_image = cv2.GaussianBlur(gray_img, (9, 9), 2) # gray_img = cv2.blur(gray_img, (3,3)) # 模糊降噪? detected_circles = cv2.HoughCircles(gray_img, # 检测用图像 cv2.HOUGH_GRADIENT, # 检测方法 1, # 分辨率反比 img_height/64, # 不确定是否需要调整 param1 = 200, param2 = 10, minRadius = 14, # 未知则输入0 maxRadius = 15 # 未知则输入0 ) if detected_circles is not None: print("检测到圆环") detected_circles = np.uint16(np.around(detected_circles)) for i in detected_circles[0, :96]: # 最多检测96个圆环 cir_center = (i[0], i[1]) # 圆心坐标元组 # print(cir_center) cir_radius = i[2] # 圆环半径 cv2.circle(img, cir_center, 1, (0, 0, 255), 5) # 标记圆心(红色) cv2.circle(img, cir_center, cir_radius, (0, 0, 0), 5) # 标记圆环轮廓(黑色) cv2.imshow("Detected Circle", img) cv2.waitKey(0) else: print("未检测到圆环") cv2.destroyAllWindows()
其他尝试
我还尝试使用Canny边缘检测处理图像,但仍会检测到孔的内边缘,结果与之前一致。
恳请各位提供解决建议或方案!
更新说明
- 感谢fmw42的评论,已更新代码以确保可复现性,并补充了图像细节。
内容的提问来源于stack exchange,提问作者Marcus A.
相关产品推荐
相关产品推荐

