【发布时间】:2021-03-15 02:25:13
【问题描述】:
我对图像处理和 python 还很陌生,所以请耐心等待
我正在尝试拍摄一张大图 (5632x2048),它基本上是一张包含各省的世界地图(从《钢铁之心 4》中提取),每个省都使用不同的 RGB 值着色,并用一组着色颜色,每种颜色对应一个特定的国家。我目前正在使用此代码
import numpy as np
import cv2
import sqlite3
dbPath = 'PATH TO DB'
dirPath = 'PATH TO IMAGE'
con = sqlite3.connect(dbPath)
cur = con.cursor()
im = cv2.imread(dirPath)
cur.execute('SELECT * FROM Provinces ORDER BY id')
provinceTable = cur.fetchall()
for line in provinceTable:
input_rgb = [line[1], line[2], line[3]]
if line[7] == None:
output_rgb = [255,255,255]
else:
output_rgb = line[7].replace('[', '').replace(']','').split(',')
im[np.all(im == (int(input_rgb[0]), int(input_rgb[1]), int(input_rgb[2])), axis=-1)] = (int(output_rgb[0]), int(output_rgb[1]), int(output_rgb[2]))
cv2.imwrite('result.png',im)
我遇到的问题是它非常慢(50 分钟后它还没有完成),因为我通过循环而不是矢量化肯定使用了 numpy 错误(我的一个概念'我还是新手,不知道该怎么做)。 Google 也不是很有帮助。
最好的方法是什么?
编辑:忘了提到我要替换的值的数量非常大(~15000)
【问题讨论】:
-
您介意分享图片进行测试吗?
-
@Luke 必须上传到 mega,因为它是 33mb mega.nz/file/…
-
您的图像实际上是 33MB(兆字节)而不是 33MB(毫比特)——只是 80 亿倍。
-
你有 N 个精确的颜色(不是范围)你想用 N 个其他颜色替换?请问N的范围是多少?
-
@MarkSetchell 抱歉回复晚了,我想用 ~100 种其他颜色替换图像中的 ~13000 种颜色,数据库中的每一行都定义了输入和输出颜色