Tôi đang phát xung quanh với một chiếc máy ảnh cho kính hiển vi sử dụng Micro-Manager 1.4. Sử dụng giao diện Python, tôi đã quản lý để truy cập vào máy ảnh, thay đổi thời gian phơi sáng, vv và tôi có thể chụp các hình ảnh riêng lẻ.Chuyển đổi mảng các pixel số nguyên đơn thành ba rép RGB trong Python
Tuy nhiên, mỗi hình ảnh được trả về dưới dạng mảng NumPy trong đó mỗi pixel được biểu diễn dưới dạng một số nguyên, ví dụ: "7765869". Theo như tôi có thể tìm thấy trên mạng, điều này được biết đến như một "BufferedImage" trong Java, và nó có nghĩa rằng các giá trị RGB được mã hóa như:
BufferedImage = R * 2^16 + G * 2^8 + B
Câu hỏi của tôi là: Làm thế nào tôi có thể sử dụng ví dụ Numpy hoặc OpenCV, chuyển đổi loại mảng này thành một mảng tiện dụng hơn trong đó mỗi pixel là một bộ ba RGB của các giá trị uint8? Không cần phải nói, việc chuyển đổi phải hiệu quả nhất có thể.
Mở rộng trên lý thuyết đằng sau này một chút, những gì bạn có là một phương trình diophantine tuyến tính có dạng 'một * x + b * y + c * z == n', nơi trong trường hợp của chúng tôi' a = 2 ** 16, b = 2 ** 8, c = 1'. Thông thường, các giải pháp cho các phương trình này liên quan đến việc tìm kiếm 'gcd (a, b, c)' và hy vọng nó chia 'n'; nếu không, thì không có giải pháp. Cho rằng một giải pháp tồn tại, có vô số các giải pháp. Tuy nhiên, chúng ta bị giới hạn trong trường hợp này để tìm ra một giải pháp '0 <= x, y, z <256', do đó sẽ chỉ có một giải pháp cho' gcd (a, b, c) | n'. – wflynny