python - 如何检测 6 米外的彩色文字?
问题描述
我正在使用 python、PIL、opencv 和 numpy 来检测单色文本(即一个是红色的,一个是绿色的)。我想在直播期间检测到 6 米外的这些彩色文字。我使用了颜色检测方法,但它们在 30-50 厘米后不起作用。相机应该接近颜色。作为检测这些文本的第二种方法,我使用了 ctpn方法。虽然它检测文本,但它不提供这些文本的坐标,因为我也需要文本的坐标点。我还在 Matlab 中尝试了 OCR 方法来自动检测自然图像中的文本,但它失败了,因为它找到了另一个小对象作为文本。我很纠结该怎么做。
例如,在 6 米外拍摄的图像中有两个不同的文本。一个文本是绿色的,另一个是红色的。这些文本的宽度约为 40-50 厘米。另外,它们只是两个不同的词,不是长篇大论。如何检测它们并将它们的位置指定为 (x1,y1) 和 (x2,y2)?那可能吗 ?需要任何成功的提示吗?
import numpy as np
from PIL import Image
# Open image and make RGB and HSV versions
RGBim = Image.open("AdjustedNewMaze3.jpg").convert('RGB')
HSVim = RGBim.convert('HSV')
# Make numpy versions
RGBna = np.array(RGBim)
HSVna = np.array(HSVim)
# Extract Hue
H = HSVna[:,:,0]
# Find all green pixels, i.e. where 100 < Hue < 140
lo,hi = 100,140
# Rescale to 0-255, rather than 0-360 because we are using uint8
lo = int((lo * 255) / 360)
hi = int((hi * 255) / 360)
green = np.where((H>lo) & (H<hi))
# Make all green pixels black in original image
RGBna[green] = [0,0,0]
def find_nearest(array, value):
array = np.asarray(array)
idx = (np.abs(array - value)).argmin()
return array[idx]
value = 120 & 125
green = find_nearest(RGBna, value)
print(green)
count = green[0].size
print("Pixels matched: {}".format(count))
Image.fromarray(green).save('resultgreen.png')
解决方案
推荐阅读
- java - 扫描我周围的蓝牙设备时,Listview 显示空行
- java - 重载方法调用的参数匹配期间的详细过程(步骤)
- c# - 如何检查文件中的 IndexOutOfRangeException 并记录它?
- apache-spark - 在远程主节点中运行 forEachPartition 时出现 Apache Spark java.lang.ClassCastException
- python-3.x - 有人可以告诉我这段代码有什么问题吗?
- applescript - 知道 Apple Pages 中的工具栏是否可见
- java - 如何在 Java 中使用 ArrayList 值更新 mysql 列?
- python - Nuke - 如何从函数内部修改节点?
- mysql - 如果另一个子查询中不存在表别名,那么创建它们的意义何在?
- node-red - 如何从远程服务器恢复 json 消息?