我有一个像这样的字符串列表:
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 中进行分水岭分割,因为它可能会进一步误导对颗粒的正确检测,我正在研究边缘检测图像(使用 HED 算法)作为附上..我希望找到一种更好的方法来分割颗粒以进行进一步处理,因为我想在我的项目中获得图像中每个多边形的面积..在此先感谢我还询问随机游走分割或任何其他可用的方法。
我正在使用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 来仅识别图像上显示的 Leaf。我已经能够分割我的图像,现在我目前被困在“如何在检测到所有组件后裁剪最大的组件。下面是代码,请看一看。
使用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)使用 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)所以我有一个单通道图像,它主要是 0(背景),以及一些前景像素的值,如 20、21、22。非零前景像素大多与具有相同值的其他前景像素聚集在一起。但是,图像中有一些噪点。为了消除噪音,我想使用连通分量分析,并且对于每个值(在本例中为 20、21、22),将除最大连通分量之外的所有内容归零。所以最后,我将有 3 个大的连接组件并且没有噪音。我将如何使用 cv2.connectedComponentsWithStats 来完成此操作?它似乎没有很好的记录,甚至在看过这篇文章之后,我不完全明白如何解析函数的返回值。有没有办法指定我只想要连接组件匹配特定灰度值的函数?
python opencv image-processing noise-reduction connected-components
我对 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) 我想获取第二个矩形顶部的粗体黑色文本以及三个彩色矩形的 (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)