Hướng dẫn how to create an image array in python - cách tạo mảng hình ảnh trong python

24

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi có một số tệp hình ảnh (950) 150x150x3 .jpg mà tôi muốn đọc thành một mảng numpy.

Sau đây là mã của tôi:

X_data = []
files = glob.glob ("*.jpg")
for myFile in files:
    image = cv2.imread (myFile)
    X_data.append (image)

print('X_data shape:', np.array(X_data).shape)

Đầu ra là (950, 150). Vui lòng cho tôi biết lý do tại sao danh sách không được chuyển đổi thành np.array một cách chính xác và liệu có cách nào tốt hơn để tạo ra mảng hình ảnh.

Trong số những gì tôi đã đọc, nối vào các mảng numpy được thực hiện dễ dàng hơn thông qua các danh sách Python và sau đó chuyển đổi chúng thành mảng.

Chỉnh sửa: Một số thông tin khác (nếu nó giúp), image.shape trả về (150,150,3) chính xác.

Hướng dẫn how to create an image array in python - cách tạo mảng hình ảnh trong python

Nắp håken

21.6K9 Huy hiệu vàng47 Huy hiệu bạc64 Huy hiệu đồng9 gold badges47 silver badges64 bronze badges

Đã hỏi ngày 10 tháng 6 năm 2016 lúc 11:23Jun 10, 2016 at 11:23

Hướng dẫn how to create an image array in python - cách tạo mảng hình ảnh trong python

Abhishek Bansalabhishek BansalAbhishek Bansal

12.5k4 Huy hiệu vàng30 Huy hiệu bạc45 Huy hiệu đồng4 gold badges30 silver badges45 bronze badges

8

Tôi đã kiểm tra mã của bạn. Nó hoạt động tốt cho tôi với đầu ra

('X_Data hình dạng:', (4, 617, 1021, 3))

Tuy nhiên, tất cả các hình ảnh là chính xác cùng một chiều.

Khi tôi thêm một hình ảnh khác với các phạm vi khác nhau, tôi có đầu ra này:

('X_Data hình dạng:', (5,))

Vì vậy, tôi khuyên bạn nên kiểm tra các kích thước và cùng một số kênh (như trong thực sự là tất cả các hình ảnh có hình ảnh)? Ngoài ra, bạn nên kiểm tra xem tất cả các hình ảnh (hoặc không có) có kênh alpha không (xem bình luận của @gughan Ravikumar)

Nếu chỉ có số lượng kênh khác nhau (nghĩa là một số hình ảnh có màu xám), thì hãy buộc tải tất cả vào định dạng màu với:

image = cv2.imread (myFile, cv2.IMREAD_COLOR)

Chỉnh sửa: Tôi đã sử dụng mã chính từ câu hỏi, chỉ được thay thế bằng thư mục của tôi (và "*.png"):

import cv2
import glob
import numpy as np

X_data = []
files = glob.glob ("C:/Users/xxx/Desktop/asdf/*.PNG")
for myFile in files:
    print(myFile)
    image = cv2.imread (myFile)
    X_data.append (image)

print('X_data shape:', np.array(X_data).shape)

Đã trả lời ngày 10 tháng 6 năm 2016 lúc 11:50Jun 10, 2016 at 11:50

4

Nối thêm hình ảnh trong một danh sách và sau đó chuyển đổi nó thành một mảng numpy, không hoạt động cho tôi. Tôi có một bộ dữ liệu lớn và RAM bị hỏng mỗi khi tôi thử. Thay vào đó tôi nối các mảng numpy, nhưng điều này có khuyết điểm riêng. Việc nối vào danh sách và sau đó chuyển đổi thành mảng NP là không gian phức tạp, nhưng việc nối thêm một mảng numpy là phức tạp về thời gian. Nếu bạn đủ kiên nhẫn, điều này sẽ giải quyết các vấn đề về RAM.

def imagetensor(imagedir):
  for i, im in tqdm(enumerate(os.listdir(imagedir))):
    image= Image.open(im)
    image= image.convert('HSV')
    if i == 0:
      images= np.expand_dims(np.array(image, dtype= float)/255, axis= 0)
    else:
      image= np.expand_dims(np.array(image, dtype= float)/255, axis= 0)
      images= np.append(images, image, axis= 0)
  return images

Tôi đang tìm kiếm các triển khai tốt hơn có thể chăm sóc cả không gian và thời gian. Hãy bình luận nếu ai đó có một ý tưởng tốt hơn.

Đã trả lời ngày 23 tháng 1 năm 2020 lúc 2:44Jan 23, 2020 at 2:44

Hướng dẫn how to create an image array in python - cách tạo mảng hình ảnh trong python

Dưới đây là một giải pháp cho các hình ảnh có một số ký tự unicode đặc biệt hoặc nếu chúng tôi đang làm việc với PNG với một lớp trong suốt, đó là hai trường hợp tôi phải xử lý với bộ dữ liệu của mình. Ngoài ra, nếu có bất kỳ hình ảnh nào không thuộc độ phân giải mong muốn, chúng sẽ không được thêm vào mảng numpy. Điều này sử dụng gói gối thay vì CV2.

resolution = 150

import glob
import numpy as np
from PIL import Image

X_data = []
files = glob.glob(r"D:\Pictures\*.png")
for my_file in files:
    print(my_file)
    
    image = Image.open(my_file).convert('RGB')
    image = np.array(image)
    if image is None or image.shape != (resolution, resolution, 3):
        print(f'This image is bad: {myFile} {image.shape if image is not None else "None"}')
    else:
        X_data.append(image)

print('X_data shape:', np.array(X_data).shape)
# If you have 950 150x150 images, this would print 'X_data shape: (950, 150, 150, 3)'

Nếu bạn không sử dụng Python 3.6+, bạn có thể thay thế chuỗi R bằng một chuỗi thông thường (ngoại trừ \\ thay vì

image = cv2.imread (myFile, cv2.IMREAD_COLOR)
0, nếu bạn đang sử dụng Windows) và chuỗi F với phép nội suy chuỗi thông thường.

Đã trả lời ngày 15 tháng 7 năm 2020 lúc 4:54Jul 15, 2020 at 4:54

Hướng dẫn how to create an image array in python - cách tạo mảng hình ảnh trong python

Micmicmic

1.05014 Huy hiệu bạc27 Huy hiệu đồng14 silver badges27 bronze badges

Định nghĩa của bạn cho khung .jpg sẽ được đưa vào một ma trận có cùng kích thước nên là x, y, r, g, b, A. "A" không được sử dụng của mỗi pixel.

Đã trả lời ngày 23 tháng 5 năm 2017 lúc 16:39May 23, 2017 at 16:39

Làm cách nào để tạo một mảng hình ảnh?

Vì hình ảnh chỉ là một mảng các pixel mang các mã màu khác nhau. Numpy có thể được sử dụng để chuyển đổi một mảng thành hình ảnh ...
Tạo một mảng numpy ..
Định hình lại mảng trên thành kích thước phù hợp ..
Tạo một đối tượng hình ảnh từ mảng trên bằng thư viện PIL ..
Lưu đối tượng hình ảnh theo định dạng tệp phù hợp ..

Làm thế nào để bạn biến một hình ảnh thành một mảng trong Python?

Cách chuyển đổi một hình ảnh thành một mảng trong Python..
an_image = pil.Hình ảnh.Mở ("example_image.png") Mở hình ảnh ..
Image_Sequence = an_image.lấy dữ liệu().
Image_Array = NP.Mảng (Image_Sequence).
print(image_array).

Làm cách nào để lưu một mảng hình ảnh trong Python?

Tạo một mảng numpy mẫu và chuyển đổi mảng thành định dạng PIL bằng cách sử dụng hàm từ pil.Điều này sẽ mở một cửa sổ thiết bị đầu cuối mới nơi hình ảnh sẽ được hiển thị.Để lưu mảng numpy dưới dạng hình ảnh cục bộ, hãy sử dụng hàm Save () và chuyển tên tệp hình ảnh với thư mục nơi lưu nó.use the save() function and pass the image filename with the directory where to save it.

Làm thế nào tôi có thể tạo một mảng trong Python?

Trong Python, bạn có thể tạo các kiểu dữ liệu mới, được gọi là mảng bằng gói Numpy.Các mảng Numpy được tối ưu hóa cho các phân tích số và chỉ chứa một loại dữ liệu duy nhất.Trước tiên, bạn nhập Numpy và sau đó sử dụng hàm mảng () để tạo một mảng.Hàm mảng () lấy một danh sách làm đầu vào.You first import NumPy and then use the array() function to create an array. The array() function takes a list as an input.