2016-09-18 16 views
12

FD ** - Tôi là một newb Python cũng như một ngăn xếp tràn newb như bạn có thể nói. Tôi đã chỉnh sửa câu hỏi dựa trên nhận xét.mảng np là không thay đổi - "đích chuyển nhượng là chỉ đọc"

Mục tiêu của tôi là đọc một tập hợp các tệp PNG, tạo (các) hình ảnh với Image.open ('tên tệp') và chuyển đổi chúng thành các mảng 2D đơn giản chỉ với 1 và 0. PNG có định dạng RGBA với hầu hết chỉ 255 và 0 làm giá trị. Khá thường xuyên trong các hình ảnh, các cạnh là các giá trị thang màu xám, mà tôi muốn tránh trong mảng 2D.

Tôi đã tạo mảng 2D từ hình ảnh bằng cách sử dụng np.asarray (Hình ảnh) chỉ nhận được kênh 'Đỏ'. Trong mỗi mảng hình ảnh 2d, tôi muốn đặt giá trị ô = 1 nếu giá trị hiện tại không bằng 0.

Vì vậy, tôi vòng vào mảng 2ngày và tôi kiểm tra giá trị di động và cố gắng đặt nó là 1.

Nó mang lại cho tôi một lỗi chỉ ra rằng mảng là chỉ đọc. Tôi đọc qua một số chủ đề tràn ngăn xếp thảo luận rằng mảng np là không thay đổi và nó vẫn còn một chút không rõ ràng. Tôi sử dụng PIL và numpy

Cảm ơn @ user2314737. Tôi sẽ cố gắng thiết lập lá cờ đó. @Eric, cảm ơn nhận xét của bạn.

from PIL import Image 
import numpy as np 

Mã liên quan:

prArray = [np.asarray(img)[:, :, 0] for img in problem_images] 

for img in prArray: 
    for x in range(184): 
     for y in range(184): 
      if img[x][y] != 0: 
       img[x][y] = 1 

Các lỗi "điểm đến nhiệm vụ được read-only" là trong dòng cuối cùng.

Cảm ơn mọi người đã trợ giúp.

+0

có rất nhiều liên kết web http://stackoverflow.com/questions/13572448/change -giá trị-trong-một-numpy-mảng cho thấy ít nhất hai – NaN

+0

Trường hợp đã 'img' đến từ, và tại sao bạn cần' asarray'? – Eric

+2

Toàn bộ đoạn mã này có thể được viết tốt hơn 'prArray = prArray! = 0' – Eric

Trả lời

16

Kiểm tra nếu mảng là có thể ghi với

>>> img.flags 
    C_CONTIGUOUS : True 
    F_CONTIGUOUS : False 
    OWNDATA : True 
    WRITEABLE : False 
    ALIGNED : True 
    UPDATEIFCOPY : False 

Nếu WRITEABLE là sai, thay đổi nó với

img.setflags(write=1) 
+4

Có thể có lý do chính đáng cho mảng là chỉ đọc - sẽ rất đáng để tìm ra lý do tại sao nhà sản xuất' img' quyết định kết quả là chỉ đọc trước khi thay đổi cờ. Nếu lý do là âm thanh, hãy cân nhắc sử dụng 'img = img.copy()' thay vào đó – Eric

Các vấn đề liên quan