相关疑难解决方法(0)

如何使用python在另一个图像中查找图像

我正在尝试使用python来确定一个(小)图像是否在另一个(大)图像中.

在我完全走错路之前的任何建议?

/编辑:好的,一些想法:我正在使用PIL,我正在将每个图像转换为'P'模式,因此我可以将每个像素作为整数进行比较.我正在尝试实现类似Boyer-Moore字符串搜索或Knuth-Morris-Pratt算法的东西,但是在2维中.

也许这会有所帮助:而不是搜索ABC in XXXABCXXX(answer = 4)我们正在寻找

ABC    
DEF    
GHI    
Run Code Online (Sandbox Code Playgroud)

XXXXX        
XABCX        
XDEFX       
XGHIX    
XXXXX  
Run Code Online (Sandbox Code Playgroud)

(回答=(2,2))

python image

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

Python OpenCV 线检测以检测图像中的“X”符号

我有一个图像,我需要在其中检测X行内的符号。

图片:

在此处输入图片说明

正如您在上图中所看到的,X线内有一个符号。我想知道符号的 X 和 Y 坐标。有没有办法在这张图片中找到这个符号,或者它很小?

import cv2
import numpy as np


def calculateCenterSpot(results):
    startX, endX = results[0][0], results[0][2]
    startY, endY = results[0][1], results[0][3]
    centerSpotX = (endX - startX) / 2 + startX
    centerSpotY = (endY - startY) / 2 + startY
    return [centerSpotX, centerSpotY]

img = cv2.imread('crop_1.png')
res2 = img.copy()

cords = [[1278, 704, 1760, 1090]]
center = calculateCenterSpot(cords)
cv2.circle(img, (int(center[0]), int(center[1])), 1, (0,0,255), 30)
cv2.line(img, (int(center[0]), 0), (int(center[0]), img.shape[0]), (0,255,0), 10)
cv2.line(img, (0, …
Run Code Online (Sandbox Code Playgroud)

python opencv image image-processing line

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

如何隔离轮廓内的所有内容,对其进行缩放并测试与图像的相似性?

我正在做一个只是为了好玩的项目,我的目标是玩在线扑克并让程序识别桌上的牌。我正在使用带有 python 的 OpenCV 来隔离卡片所在的区域。我已经能够拍摄该区域的图像,对其进行灰度和阈值处理,并在卡片边缘绘制轮廓。我现在被困在如何前进的问题上。

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

import cv2
from PIL import ImageGrab
import numpy as np

def processed(image):
    grayscaled = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    thresholded = cv2.Canny(grayscaled, threshold1 = 200, threshold2 = 200)

    return thresholded

def drawcard1():
    screen = ImageGrab.grab(bbox = (770,300,850,400))

    processed_img = processed(np.array(screen))  

    outside_contour, dummy = cv2.findContours(processed_img.copy(), 0,2)

    colored = cv2.cvtColor(processed_img, cv2.COLOR_GRAY2BGR)

    cv2.drawContours(colored, outside_contour, 0, (0,255,0),2)     

    cv2.imshow('resized_card', colored)

while True:
    drawcard1()



    if cv2.waitKey(25) & 0xFF == ord('w'):
        cv2.destroyAllWindows()
        break

Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的结果:

单卡轮廓

我需要能够获取轮廓的内部,并删除它外部的任何东西。然后生成的图像应该只是卡片,我需要将其缩放到 49x68 像素。一旦我能做到这一点,我的计划是获得等级和西装的轮廓,并用白色像素填充它,然后我会将其与一组图像进行比较以确定最适合的。

我对 OpenCV 和图像处理非常陌生,但我发现这些东西非常吸引人!我已经能够通过谷歌走到这一步,但这次我找不到任何东西。

这是我现在用来替换游戏的图像:

游戏图片示例

这是我将用来比较桌卡的图像之一:

已知卡的图片

python opencv image image-processing computer-vision

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

读取彩色数字图像是什么数字以进行控制台

因此,我正在尝试创建一个程序,该程序可以查看图像的编号并在控制台中打印整数。(我正在使用 python 3)

例如,程序识别出以下图像(程序必须检查的实际图像)是数字 2:

2号

我试图将它与其中包含 2 的其他图像进行比较,cv2.matchTemplate()但是每次蓝色像素的 rgb 值对于每个图像都有一点不同,并且图像可能会更大或更小。例如下图:

2号

除了其他蓝色数字图像(0-9)之外,它还必须识别它,例如以下图像:

5号

我尝试了多个匹配模板代码,并制作了一个包含数字 0-9 图像的文件夹作为模板,但每次几乎每个数字都在需要识别的数字中被识别。例如数字 5 在数字 2 的图像中被识别。如果它不能识别所有这些,它就会识别错误的。

我试过的那些:

但就像我之前说的那样,这些问题也随之而来。

我还尝试查看每张图像中蓝色的百分比,但这些数字接近于通过查看其中的蓝色来告诉数字不同。

有没有人有办法解决吗?我是不是很笨,cv2.matchTemplate()有没有更简单的选择?(我不介意为此使用库,因为这是更大代码段的一部分,但我更喜欢对其进行编码,而不是库)

python opencv image image-processing python-3.x

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

如何使用 OpenCV 从图像中删除特定标签/贴纸/对象?

我有数百张珠宝产品的图片。其中一些带有“畅销书”标签。标签的位置因图像而异。我想遍历所有图像,如果图像具有此标签,则将其删除。结果图像将在移除对象的像素上渲染背景。

带有标签/贴纸/对象的图像示例:

要移除的标签/贴纸/对象:

import numpy as np
import cv2 as cv

img = plt.imread('./images/001.jpg')
sticker = plt.imread('./images/tag.png',1)
diff_im = cv2.absdiff(img, sticker)
Run Code Online (Sandbox Code Playgroud)

我希望得到的图像是这样的:

python opencv image image-processing computer-vision

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