python - 如何在 python 中检测来自 png 的某些像素的 rgb 值?
问题描述
我的代码截取屏幕截图,(应该)测试屏幕截图中的任何像素是否是通用 rgb 值(在我的示例中,它们的范围为:r_min、r_max 和 g_min、g_max。此外,还有 end_time确保有足够的时间扫描所有像素,因为它会截取另一张照片,并检查另一张照片中的像素,直到找到特定像素,然后将变量 (fish_found) 的值从0 到 1,并通过 if 语句。
这是我想出的代码:
fish_found = 0
im = screenshot('check.png')
def find_fish(image_name):
r_min = 140
r_max = 190
g_min = 85
g_max = 185
fish_found = 0
img = Image.open(image_name)
rgb = img.convert('RGB')
for x in range(img.size[0]):
for y in range(img.size[1]):
r, g, b = rgb.getpixel((x, y))
if r >= r_min and r <= r_max and g >= g_min and g <= g_max:
fish_found = fish_found + 1
while True:
im = screenshot('check.png', region=(990,415,20,20))
end_time = datetime.now() + timedelta(seconds=0.5)
while datetime.now() < end_time:
find_fish('check.png')
print(fish_found)
if fish_found > 0:
print("You found a fish")
解决方案
好的,为任何需要它的人更新:整个代码一团糟,我找到了一种更好的方法来确定像素是否匹配:
def function():
pic = screenshot('screen.png', region=(985, 420, 30, 30))
width, height = pic.size
for x in range(0, width, 2):
#modify the last digit to take greater steps, if you don't want to check every
#pixel
for y in range(0, height, 2):
#same thing, change the 2 to any value you want
r, g, b = pic.getpixel((x, y))
#this gets the actual rgb value of the pixel
if r in range(250, 256) and g in range(195, 215) and b in range(28, 38):
#put the range of values of r g b up here ^
#down here you place your code (after you find out if they match, what do
#you do should be right here.
#after all of that, just call your function when you want to.
function()
推荐阅读
- python - 沿列对二维数组进行排序的 Pythonic 高效方法
- kotlin - Kotlin 中学班建设者
- java - 为什么spring-data-redis ZSetOperations范围操作返回Set而不是SortedSet?
- c++ - Number 和 Shape 超类中的 vtable 错误
- kubernetes - 在本地 Kubernetes 集群上安装 OpenFaas
- loadrunner - 负载运行器中的巨大响应时间
- aframe - 如何在 Aframe 中使模型 glft 居中?
- firebase - firebase 实时数据库分片规则
- vue.js - 如何在 datepicker vuetify 中添加加载?
- python - 如何使用 Python pandas-datareader 0.8 从 Alpha Vantage 正确调用数据