相关疑难解决方法(0)

根据另一个列表中的值排序列表?

我有一个像这样的字符串列表:

X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]
Run Code Online (Sandbox Code Playgroud)

使用Y中的值对X进行排序以获得以下输出的最短方法是什么?

["a", "d", "h", "b", "c", "e", "i", "f", "g"]
Run Code Online (Sandbox Code Playgroud)

具有相同"密钥"的元素的顺序无关紧要.我可以使用for构造,但我很好奇是否有更短的方法.有什么建议?

python sorting

317
推荐指数
10
解决办法
24万
查看次数

图像中土壤颗粒分水岭以外的替代分割技术

我正在寻找一种替代方法来分割以下土壤颗粒图像中的颗粒,而不是在 python 中进行分水岭分割,因为它可能会进一步误导对颗粒的正确检测,我正在研究边缘检测图像(使用 HED 算法)作为附上..我希望找到一种更好的方法来分割颗粒以进行进一步处理,因为我想在我的项目中获得图像中每个多边形的面积..在此先感谢我还询问随机游走分割或任何其他可用的方法。

在此处输入图片说明 在此处输入图片说明

python opencv image image-processing computer-vision

8
推荐指数
1
解决办法
978
查看次数

如何在不损坏文本的情况下消除点/噪音?

在此输入图像描述

我正在使用OpenCV和Python处理图像.我需要从图像中删除点/噪声.
我试过扩张使点变小,但是文字被损坏了.我也试过循环扩张两次并侵蚀一次.但这并没有给出令人满意的结果.
还有其他方法可以达到这个目的吗?
谢谢 :)

编辑:
我是图像处理的新手.我目前的代码如下

image = cv2.imread(file)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
kernel = np.ones((2, 2), np.uint8)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
gray = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
gray = cv2.erode(gray, kernel, iterations=1)
gray = cv2.dilate(gray, kernel, iterations=1)
cv2.imwrite(file.split('.'[0]+"_process.TIF", gray))
Run Code Online (Sandbox Code Playgroud)

编辑2:
我尝试了中位数模糊.它解决了90%的问题.我一直在使用gaussianBlurring.
谢谢

python opencv image image-processing

6
推荐指数
1
解决办法
2806
查看次数

如何使用 OpenCV 和 Python 提取最大的连通分量?

我在 Python 中使用 OpenCV 来仅识别图像上显示的 Leaf。我已经能够分割我的图像,现在我目前被困在“如何在检测到所有组件后裁剪最大的组件。下面是代码,请看一看。

  1. 使用scipy.ndimage,找到组件后无法前进:

    def undesired_objects ( image ):
        components, n = ndimage.label( image )
        components = skimage.morphology.remove_small_objects( components, min_size = 50 )
        components, n = ndimage.label( components )
        plot.imshow( components )
        plot.show()
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用 OpenCV connectedComponentsWithStats:

    def undesired_objects ( image ):
        image = image.astype( 'uint8' )
        nb_components, output, stats, centroids = cv2.connectedComponentsWithStats(image, connectivity=4)
        sizes = stats[1:, -1]; nb_components = nb_components - 1
        min_size = 150
        img2 = np.zeros(( output.shape ))
        for i in range(0, nb_components):
            if sizes[i] …
    Run Code Online (Sandbox Code Playgroud)

python opencv image-segmentation

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

如何使用python OpenCV在匹配特定值的单通道图像中找到最大的连通分量?

所以我有一个单通道图像,它主要是 0(背景),以及一些前景像素的值,如 20、21、22。非零前景像素大多与具有相同值的其他前景像素聚集在一起。但是,图像中有一些噪点。为了消除噪音,我想使用连通分量分析,并且对于每个值(在本例中为 20、21、22),将除最大连通分量之外的所有内容归零。所以最后,我将有 3 个大的连接组件并且没有噪音。我将如何使用 cv2.connectedComponentsWithStats 来完成此操作?它似乎没有很好的记录,甚至在看过这篇文章之后,我不完全明白如何解析函数的返回值。有没有办法指定我只想要连接组件匹配特定灰度值的函数?

python opencv image-processing noise-reduction connected-components

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

使用 OpenCV 提取手写文本的形状

我对 OpenCV Python 非常陌生,我真的需要一些帮助。

所以我在这里想做的就是提取下图中的这些单词。

手绘图像

文字和形状都是手绘的,所以并不完美。我在下面做了一些编码。

首先,我对图像进行灰度化

img_final = cv2.imread(file_name)
img2gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)

然后我使用 THRESH_INV 显示内容

ret, new_img = cv2.threshold(image_final, 100 , 255, cv2.THRESH_BINARY_INV)
Run Code Online (Sandbox Code Playgroud)

之后,我扩展内容

kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3 , 3)) 
dilated = cv2.dilate(new_img,kernel,iterations = 3)
Run Code Online (Sandbox Code Playgroud)

我放大图像是因为我可以将文本识别为一个簇

之后,我在轮廓周围应用boundingRect并在矩形周围绘制

contours, hierarchy = cv2.findContours(dilated,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) # get contours
index = 0
for contour in contours:

    # get rectangle bounding contour
    [x,y,w,h] = cv2.boundingRect(contour)

    #Don't plot small false positives that aren't text
    if w < 10 or h < 10:
        continue

    # draw rectangle around …
Run Code Online (Sandbox Code Playgroud)

python opencv

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

OpenCV-使用python从字符串中提取字母

我有一张图片

在此处输入图片说明

我想从中分别提取每个字符。

我想是这个输出等。

使用OpenCV和python的合适方法是什么?

opencv image-processing python-2.7

2
推荐指数
1
解决办法
1485
查看次数

如何在 OpenCV、Python 中获取使用 mask 找到的形状的 (x,y) 坐标?

我正在尝试在图像上找到某些项目。简化形式的图像如下所示: 在此输入图像描述

我想获取第二个矩形顶部的粗体黑色文本以及三个彩色矩形的 (x,y) 坐标。

我已经准备好了面具,除了我无法弄清楚的黑色文本的面具。但是,文本始终位于矩形的顶部,因此如果我能够找出底部大矩形的位置,我也会得到文本的位置。

这些是我得到的输出: 在此输入图像描述

我尝试根据此评论使用 ConnectedComponents 函数使用 ConnectedComponents 函数,但除了对各种对象进行着色和分组之外,我无法继续前进,因此我没有在下面包含该代码片段以使事情尽可能清晰。

到目前为止,这是我的代码:

import cv2
import numpy as np
import imutils

PATH = "stackoverflow.png"
img = cv2.imread(PATH)
imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

mask_border = cv2.inRange(imgHSV,np.array([0,0,170]),np.array([0,0,175]))
mask_green  = cv2.inRange(imgHSV,np.array([76,221,167]),np.array([76,221,167]))
mask_pink   = cv2.inRange(imgHSV,np.array([168,41,245]),np.array([172,41,252]))
mask_red    = cv2.inRange(imgHSV,np.array([4,207,251]),np.array([4,207,251]))
#mask_black  = ???

all_masks = cv2.bitwise_or(mask_border, mask_green)
all_masks = cv2.bitwise_or(all_masks, mask_pink)
all_masks = cv2.bitwise_or(all_masks, mask_red)

cv2.imshow("Masks", all_masks)

imgResult = cv2.bitwise_and(img,img,mask=all_masks)

cv2.imshow("Output", imgResult)

cv2.waitKey(0)

Run Code Online (Sandbox Code Playgroud)

python opencv image-processing

2
推荐指数
1
解决办法
8979
查看次数