cv2 numpy颜色更改问题

尝试更改颜色背景原图为

img


尝试通过遍历每个像素点试图更改背景板,
代码如下

import numpy as np
import cv2
import copy
def read_and_reshape_img():
    img = cv2.imread('1.png')
    img = np.array(img)

    (hight,wight,_) = img.shape

    img_copy = copy.deepcopy(img)
    img_copy = img_copy.reshape(hight*wight,3)
    standard = img_copy[1,]#获取背景板颜色
    print(standard)
    for i in range(hight*wight):
        if (img_copy[i,].all() == standard.all()):#若背景板颜色一致则更改
            img_copy[i,] = [255,0,0]
            #print('True')
    img_copy = img_copy.reshape(hight,wight,3)
    cv2.imshow('test',img_copy)
    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__ == '__main__':
    read_and_reshape_img()

但出来的是这个玩意

img


字变蓝了,背景板没变,而且将赋值的颜色更改为[255,255,255]时背景板却又能正确的去掉背景板
请问出现问题的原因是什么?我该如何解决这个问题?有没有更好的写法?

你是说什么也不改,只把 img_copy[i,] = [255,0,0] 改成 img_copy[i,] = [255,255,255] 就能正确去掉背景板?

你这样应该去不掉背景板吧?只会把图片完全填充成为你设定的背景色

打印了一下像素点,进入if的有1456个点,没进的有465104个点,所以实际判断的与预估是反的。改写颜色的应该是改的字的颜色,但是出来的结果又不一样。。。。像是叠加或者减去了

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^