相关疑难解决方法(0)

Canny Edge Image - 去除噪音

我有一个Canny边缘检测到的球的图像(见下面的链接),其中包含许多嘈杂的边缘.什么是最好的图像处理技术,我可以用来删除这些嘈杂的边缘而不删除属于球的边缘?

原始图像

原版的

Canny边缘图像

谨慎的

非常感谢大家的帮助和建议,非常感谢!

Ps我试图在使用Circle Hough Transform来检测球之前清理边缘图像.

image-processing edge-detection

7
推荐指数
3
解决办法
1万
查看次数

如何在2D numpy数组中找到值的特定"区域"?

我正在使用numpy101x101=10201值组成的2D 数组.这样的值的float类型和范围从0.01.0.数组有一个X,Y坐标系,它起源于左上角:因此,位置(0,0)在左上角,而位置(101,101)在右下角.

这就是2D数组的样子(只是一个摘录):

X,Y,Value
0,0,0.482
0,1,0.49
0,2,0.496
0,3,0.495
0,4,0.49
0,5,0.489
0,6,0.5
0,7,0.504
0,8,0.494
0,9,0.485
Run Code Online (Sandbox Code Playgroud)

我希望能够:

1)计算超过给定阈值的单元区域数(见下图),比如说0.3;

2)确定这些区域的视觉中心与具有坐标的左上角之间的距离(0,0).

怎么能在Python 2.7中完成?

这是一个2D数组的直观表示,突出显示了2个区域(颜色越深,值越高):

在此输入图像描述

python arrays numpy image-processing scipy

4
推荐指数
1
解决办法
3017
查看次数

如何找到这些有时重叠的圆圈的中心

作为我正在研究的项目的一部分,我需要使用OpenCV和Python在图像中找到一些"blob"的中心点.我遇到了一些麻烦,真的很感激任何帮助或见解:)

我目前的方法是:获取图像的轮廓,在那些上叠加椭圆,使用斑点检测器找到每个图像的中心.这种效果相当不错,但偶尔我还需要忽略无关的斑点,有时斑点会相互碰触.

以下是一个很好的例子: 良好的源图像: 良好的源图像 提取轮廓后: 提取轮廓后 检测到斑点: 检测到斑点

当它变得很糟糕时(你可以看到它错误地将椭圆覆盖在三个blob上,并检测到一个我不想要的): 错误的源图像: 糟糕的源图像 提取轮廓后: 提取轮廓后 检测到斑点: 检测到斑点

这是我目前使用的代码.我不确定任何其他选择.

def process_and_detect(img_path):
    img = cv2.imread(path)
    imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    ret, thresh = cv2.threshold(imgray, 50, 150, 0)
    im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    drawn_img = np.zeros(img.shape, np.uint8)
    min_area = 50
    min_ellipses = []
    for cnt in contours:
        if cv2.contourArea(cnt) >= min_area:
            ellipse = cv2.fitEllipse(cnt)
            cv2.ellipse(drawn_img,ellipse,(0,255,0),-1)
    plot_img(drawn_img, size=12)

    # Change thresholds
    params = cv2.SimpleBlobDetector_Params()
    params.filterByColor = True
    params.blobColor = 255
    params.filterByCircularity = True
    params.minCircularity = 0.75
    params.filterByArea = True
    params.minArea …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing

4
推荐指数
1
解决办法
961
查看次数

Python和opencv:如何将此图像的所有背景转换为一种颜色或透明

我使用图像1上的阈值掩模(图像2)创建了下面的图像(图像3).我试图将图像3(肺部)的中心图像之外的所有像素转换为一种颜色(例如黑色) OpenCV的.基本上这样我只剩下肺部的图像对着均匀的背景(甚至透明).我的问题是图像3上的外部像素与肺部内部像素的相似性.这是否可以使用opencv?

图片1

图片2

图像3

python opencv image

0
推荐指数
1
解决办法
3057
查看次数

cv2.floodfill如何工作?

这是一个显示cv2.floodfill函数用法的示例代码

import cv2
import numpy as np
import os

def imshow(img):
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


img = cv2.imread('test4.png')

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

thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY_INV,3,1)

_, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_NONE)

mask = np.zeros(img.shape[:-1],np.uint8)

cv2.drawContours(mask,contours,-1,(255,255,255),-1)

height, width = img.shape[:-1]

mask1 = np.zeros((height+2, width+2), np.uint8)     # line 26
cv2.floodFill(mask,mask1,(0,0),255)     # line 27
mask_inv=cv2.bitwise_not(mask)

imshow(mask_inv)
Run Code Online (Sandbox Code Playgroud)

我在我的一个项目中使用此函数但我不理解代码的mask1部分(第26行和第27行),

为什么我们为高度为'-h'和宽度为'w'的给定图像创建形状为h + 2,w + 2的mask1?(第26行)

为什么我们必须将这个mask1传递给cv2.floodfill函数?(第27行)

这是示例代码的输入和输出.

输入图像 输入图像

输出图像 输出图像

请帮忙

python opencv computer-vision

0
推荐指数
1
解决办法
1万
查看次数