Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用OpenCV检测圆形区域(具有大量小对象)_Python_Opencv_Image Processing - Fatal编程技术网

Python 使用OpenCV检测圆形区域(具有大量小对象)

Python 使用OpenCV检测圆形区域(具有大量小对象),python,opencv,image-processing,Python,Opencv,Image Processing,在原始图片中,我想检测圆形区域。(腺体)我设法了解了这些区域的轮廓,但由于有许多较小的物体(核),我不能再进一步了 我最初的想法是使用cv2.connectedComponentsWithStats函数删除小对象。但不幸的是,如图所示,格兰德区域也包含小对象,它们没有正确连接。这个功能也会将腺体轮廓的小区域剔除,留下轮廓之外的部分 有人能帮我找到解决这个问题的办法吗? 事先非常感谢 原始图片 腺体的大致轮廓(里面有很多小物体) cv2之后。连接的组件具有统计信息 OpenCV 我认为你可以通

在原始图片中,我想检测圆形区域。(腺体)我设法了解了这些区域的轮廓,但由于有许多较小的物体(核),我不能再进一步了

我最初的想法是使用cv2.connectedComponentsWithStats函数删除小对象。但不幸的是,如图所示,格兰德区域也包含小对象,它们没有正确连接。这个功能也会将腺体轮廓的小区域剔除,留下轮廓之外的部分

有人能帮我找到解决这个问题的办法吗? 事先非常感谢

原始图片

腺体的大致轮廓(里面有很多小物体)

cv2之后。连接的组件具有统计信息

OpenCV 我认为你可以通过使用。类似的方法可能适合您(您必须根据需要调整参数):

可能需要一些额外的预处理,以消除噪声,例如,在转换之前执行预处理可能也会有所帮助


神经网络
另一种选择是使用神经网络进行图像分割。一个相当成功的方法是
掩码RCNN
。GitHub上已经有了一个工作的python实现:。

这是一个困难的问题,但幸运的是,它已经被广泛研究过了。在你尝试重新发明轮子之前,请先进行文献检索!我知道这一点,我读了几篇科学文章,但不幸的是,这些方法对我的图像不起作用。我将寻求其他解决办法。谢谢你的建议。我认为传统的图像处理方法无法处理这样的任务。CNN(如联合国环境电视台)的其他部门可以完成这项工作。非常感谢您的帮助,我一定会尝试以下方法:)
import sys
import cv2 as cv
import numpy as np


def main(argv):
    filename = argv[0]
    src = cv.imread(filename, cv.IMREAD_COLOR)
    if src is None:
        print ('Error opening image!')
        print ('Usage: hough_circle.py [image_name -- default ' + default_file + '] \n')
        return -1

    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

    gray = cv.medianBlur(gray, 5)

    rows = gray.shape[0]
    circles = cv.HoughCircles(gray, cv.HOUGH_GRADIENT, 1, rows / 32,
                               param1=100, param2=30,
                               minRadius=20, maxRadius=200)

    if circles is not None:
        circles = np.uint16(np.around(circles))
        for i in circles[0, :]:
            center = (i[0], i[1])
            # circle center
            cv.circle(src, center, 1, (0, 100, 100), 3)
            # circle outline
            radius = i[2]
            cv.circle(src, center, radius, (255, 0, 255), 2)


    cv.imshow("detected circles", src)
    cv.waitKey(0)

    return 0


if __name__ == "__main__":
    main(sys.argv[1:])