首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在opencv - numpy - python中转换颜色时松动抗锯齿

在opencv - numpy - python中转换颜色时松动抗锯齿
EN

Stack Overflow用户
提问于 2018-07-30 05:06:01
回答 1查看 424关注 0票数 1

我想转换图像中的颜色,从而保留抗锯齿和透明的背景。初始图像为透明背景的png:

我使用以下代码将箭头从红色转换为绿色:

代码语言:javascript
复制
import numpy as np
import cv2

image = cv2.imread("C:/Temp/arr.png")
image = cv2.cvtColor(image, cv2.COLOR_BGR2BGRA)
cv2.imwrite('C:/Temp/source.png', image)

image[np.where((image == [0,0,255,255]).all(axis = 2))] = [0,255,0,255]

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGBA)
image[np.all(image == [255, 255, 255, 255], axis=2)] = [255, 255, 255, 0]
cv2.imwrite('C:/Temp/target.png', image)

但箭头尖端的对角线变得非常细小:

我怎样才能改进这个颜色转换呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 10:04:32

抗锯齿发生在您已丢弃的alpha通道中。您不需要执行cvtColor,但需要在imread中保留alpha通道。

结果:

代码语言:javascript
复制
import numpy as np
import cv2

image = cv2.imread("arr.png", cv2.IMREAD_UNCHANGED)
b, g, r, a = cv2.split(image)

bgr = cv2.merge((b, g, r))

all_g = np.ones_like(bgr)
all_g[:, :] = (0,255,0)

bgr = np.where(bgr == (0,0,255), all_g, bgr)

image = cv2.merge((bgr, a))

cv2.imwrite('target.png', image)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51584560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档