2010-01-30 19 views
14

Tôi đang sử dụng kết cấu để tạo mảng pixel. Hình ảnh 800x600 là mảng 3 chiều của uint8, 800x600x3. Tôi cũng có một mảng tương tự với mẫu cố định (bảng kiểm tra, xem here). Tôi có một mảng khác, giá trị mặt nạ 800x600. Trường hợp mặt nạ bằng không, tôi muốn sao chép pixel mẫu thành pixel ảnh. Trường hợp mặt nạ không phải là số không, tôi muốn để riêng pixel ảnh.Sử dụng numpy để che một hình ảnh với một mẫu?

>>> image.shape 
(800, 600, 3) 
>>> chex.shape 
(800, 600, 3) 
>>> mask.shape 
(800, 600) 

này cảm thấy như nó nên làm việc:

image[mask == 0,...] = chex 

nhưng mang lại cho "ValueError: mảng không broadcastable để sửa hình dạng".

Tôi phải làm gì để sao chép pixel chex thành pixel hình ảnh trong đó mặt nạ bằng 0?

Trả lời

12
idx=(mask==0) 
image[idx]=chex[idx] 

Lưu ý rằng image có hình dạng (800,600,3), trong khi idx có hình dạng (800.600). The rules để lập chỉ mục trạng thái

if the selection tuple is smaller than n, then as many : objects as needed are added to the end of the selection tuple so that the modified selection tuple has length N.

Vì vậy, các mảng lập chỉ mục có khả năng phát sóng riêng. Hình dạng của idx được thăng cấp lên (800,600, :)

0

Hãy thử:

image[mask[:] == 0,...] = chex[mask[:] == 0,...] 
+0

"ValueError: mảng không broadcastable để sửa hình dạng" –

0

Tôi đã sử dụng các mảng 8x6x3, 8x6x3 và 8x6 để đại diện cho mảng hình ảnh, mảng kiểm tra và mảng mặt nạ tương ứng.

# first create mini-versions of your arrays: 
mask = NP.random.random_integers(0, 1, 48).reshape(8, 6) 
img = NP.random.random_integers(3, 9, 8*6*3).reshape(8, 6, 3) 
chk = NP.ones((8, 6, 3)) 

# all the work done in these two lines 
mask = mask[:,:,NP.newaxis] 
res = NP.where(mask==0, chk, img) 
+0

Các hình dạng của các hình ảnh ba, 'mask.shape (8, 6), chk.shape (8, 6, 3) và img.shape (8, 6, 3) 'có vẻ không khớp với yêu cầu của' np.where.' – Gathide

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