【问题标题】:OpenCV detect the number pills in a tubeOpenCV 检测试管中的药丸数量
【发布时间】:2017-03-16 17:39:23
【问题描述】:

我有一个透明塑料管,里面正好有 10 个黑色小球。但有时那里会有 11 或 9 颗药丸。有什么方法可以检测管子里的球数吗?

现在有了cv2,我能做的最好的事情是:

import cv2
import numpy as np

original = cv2.imread("d.jpg", cv2.IMREAD_GRAYSCALE)
retval, image = cv2.threshold(original, 50, 255, cv2.THRESH_BINARY)

cv2.imshow('image',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

我得到一张黑白图像以获得更好的对比度。

我尝试计算黑色像素的数量,然后将其除以一个数字以获得球的数量。但是由于有很多球相互重叠,所以无论我如何调整那个数字,它都无法正常工作。

还有其他方法可以计算吗?

这里有更多例子:

【问题讨论】:

    标签: python opencv image-processing


    【解决方案1】:

    您可能想尝试黑白图像 --> 距离变换 --> 模糊 --> 分水岭变换。这是我在 MATLAB 中得到的结果

    im=imread('tube.png');
    
    % Transform
    im=rgb2gray(im);
    
    % Threshold
    im=im>80;
    im=imclose(im,strel('disk',2));
    im=bwareaopen(im,10);
    
    figure,
    subplot(121);
    imshow(im,[]);axis image;colormap gray
    
    % Distance transform
    imb=bwdist(im);
    
    % Blur
    sigma=4;
    kernel = fspecial('gaussian',4*sigma+1,sigma);
    im2=imfilter(imb,kernel,'symmetric');
    
    % Watershed transform
    L = watershed(max(im2(:))-im2);
    
    % Plot
    lblImg = bwlabel(L&~im);
    
    subplot(122);
    imshow(label2rgb(lblImg,'jet','k','shuffle'));
    

    【讨论】:

    • 这个OpenCV tutorial 解释了如何在 Python 中使用 OpenCV 做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多