错误是什么:“ ValueError:分配目标是只读的”?

时间:2019-03-17 06:42:13

标签: python rgb bgr

当我使用cv2.imread()打开jpg文件时,有时会失败,这可能是由于我使用的BGR格式所致。所以我切换到PLT以使用RGB。

import matplotlib.pyplot as plt
import numpy as np

def rgb_to_gray(img):
        grayImage = np.zeros(img.shape)
        R = np.array(img[:, :, 0])
        G = np.array(img[:, :, 1])
        B = np.array(img[:, :, 2])

        R = (R *.299)
        G = (G *.587)
        B = (B *.114)

        Avg = (R+G+B)
        grayImage = img

        for i in range(3):
           grayImage[:,:,i] = Avg

        return grayImage       

image_file = 'C:\A.jpg';
img = plt.imread(image_file,0)
gray = rgb_to_gray(img).copy()

当我将图像转换为灰度时,却遇到错误。 :“ ValueError:分配目标是只读的”我如何在此处更改代码以避免它?

2 个答案:

答案 0 :(得分:0)

此行显示为多余并导致错误,请删除它:

        grayImage = img

答案 1 :(得分:0)

不确定PIL库,但如果它基于numpy数组,请尝试以下(https://numpy.org/doc/stable/reference/generated/numpy.copy.html):

grayImage = img.copy()

这将通过初始化一个完全不同的实例而不是引用它(您使用'='运算符引用它)来创建完整副本

https://pythonexamples.org/python-numpy-duplicate-copy-array/#:~:text=Following%20is%20the%20syntax%20to%20make%20a%20copy,of%20array1.%20Example%201%3A%20Copy%20Array%20using%20Numpy