Bây giờ, trước khi đọc toàn bộ hướng dẫn này, tôi muốn các bạn trả lời câu hỏi này trong phần bình luận, theo cách đó bạn có thể giao việc cho bộ não của mình. Dù sao, đối với những bạn chưa bao giờ trả lời câu hỏi hoặc không biết câu trả lời, bằng cách đọc bài viết này, cuối cùng bạn có thể trả lời câu hỏi mà không do dự. Đủ sự cường điệu này, hãy bắt đầu. Nhân tiện, toàn bộ mã cho hướng dẫn này cũng có thể được tìm thấy trên Kho lưu trữ GitHub của tôi bên dưới
Tanu-N-Prabhu/Trăn
Permalink Dismiss GitHub là nơi có hơn 50 triệu nhà phát triển làm việc cùng nhau để lưu trữ và xem xét mã, quản lý…
github. com
Câu chuyện
Ảnh của Pixabay từ Pexels
Tôi đã được giao một bài tập trong Lớp xử lý hình ảnh [Cao học], trong đó tôi phải đọc một hình ảnh thô từ một tệp, thay đổi kích thước hình ảnh đó thành các kích thước được chỉ định bằng thuật toán lấy mẫu lại điểm đơn và lấy mẫu lại trung bình có trọng số. Có một ghi chú được gửi cho tôi nói rằng "Không sử dụng bất kỳ thư viện bên ngoài nào" cho các chương trình của bạn, đặc biệt là để đọc và lưu hình ảnh. Chỉ các thuật toán được chọn mới được phép sử dụng một thuật toán như vậy trong python là
# For example a particular image in this case would contain [512*512] rows and columns meaning 262,144 pixels0. Điều này rất đau đớn khi nghe, nhưng dù sao thì tôi cũng phải làm và tôi đã làm được. Trong hướng dẫn này, chúng tôi sẽ chỉ tập trung vào đọc và lưu hình ảnh và không có gì lạ mắt
ROWS = 512
COLS = 512# Different images have different dimensions. Change it accordingly
Câu hỏi
Viết chương trình đọc một hình ảnh thang độ xám ở định dạng thô từ một tệp và lưu hình ảnh mới vào một tệp mới ở định dạng thô. [Tôi chỉ đặt câu hỏi ngắn gọn vì đây là nội dung bạn sẽ học hôm nay]
Nguồn hình ảnh
Dưới đây là nguồn cho hình ảnh 8 bit thang độ xám. Tôi sẽ sử dụng hình ảnh mẫu thứ 4 “Barbara, 8 bit grey [512 x 512]. thô”. Liên kết cho các hình ảnh mẫu khác có thể được tìm thấy ở đây
Sử dụng thư viện
Như tôi đã nói, tôi sẽ không sử dụng bất kỳ thư viện đặc biệt nào của python. Một số thư viện xu hướng và được sử dụng rộng rãi nhất trong lĩnh vực Xử lý ảnh là
- Nặng nề
- OpenCV
- PIL
- Matplotlib
Phần thú vị ở đây là chỉ bằng cách sử dụng các thư viện OpenCV, PIL và Matplotlib, chúng ta có thể đọc và lưu hình ảnh vào một tệp chỉ trong hai dòng mã. Nhưng vấn đề ở đây là không sử dụng các thư viện đặc biệt và các phương thức đặc biệt. Numpy là thư viện tiêu chuẩn duy nhất sẽ được sử dụng xuyên suốt [bạn sẽ biết tại sao]
Mã số
Khoảnh khắc mà tất cả các bạn đã chờ đợi
Nhập thư viện
Lý do duy nhất mà thư viện
# For example a particular image in this case would contain [512*512] rows and columns meaning 262,144 pixels0 được sử dụng là để chuyển đổi hình ảnh thô thành một mảng pixel. Chủ yếu được sử dụng để lưu trữ các giá trị trong một mảng
ROWS = 512
COLS = 512# Different images have different dimensions. Change it accordingly
# Necessary library used for this tutorial
import numpy as np
Khởi tạo giá trị hàng và cột cho hình ảnh
Kích thước của hình ảnh được tạo thành từ các hàng và cột
# For example a particular image in this case would contain [512*512] rows and columns meaning 262,144 pixels
ROWS = 512
COLS = 512# Different images have different dimensions. Change it accordingly
Mở tệp hình ảnh đầu vào [định dạng RAW]
# Opening the input image [RAW]
fin = open['barbara_gray.raw']
print[fin]
Điều này sẽ nhắc đầu ra là
Bây giờ, chúng ta cần xây dựng một mảng 2D từ dữ liệu thô [hình ảnh]. Phải sử dụng một cách hiệu quả cao để đọc dữ liệu nhị phân với kiểu dữ liệu đã biết, điều này có thể được thực hiện với sự trợ giúp của thư viện
# For example a particular image in this case would contain [512*512] rows and columns meaning 262,144 pixels0
ROWS = 512
COLS = 512# Different images have different dimensions. Change it accordingly
Đang tải hình ảnh đầu vào
Đây là nơi niềm vui thực sự bắt đầu. Cảm ơn
# For example a particular image in this case would contain [512*512] rows and columns meaning 262,144 pixels0________số 8_______
ROWS = 512
COLS = 512# Different images have different dimensions. Change it accordingly
Khi thực hiện điều này, bạn sẽ nhận được
.. Load input image
Dimension of the old image array: 1
Size of the old image array: 262144
Chuyển đổi từ mảng 1D sang mảng 2D
Có một cách để chúng ta có thể chuyển mảng 1D sang mảng 2D chẳng hạn như chia sàn tổng số pixel với hàng và cột của ảnh hoặc cột và cột [cũng được]. Điều này có thể được viết với sự giúp đỡ của một công thức
# For example a particular image in this case would contain [512*512] rows and columns meaning 262,144 pixels4
ROWS = 512
COLS = 512# Different images have different dimensions. Change it accordingly
tp = tổng số pixel; . Lý do chúng tôi sử dụng phép chia sàn thay vì phép chia vì chúng tôi cần làm tròn các giá trị dưới dạng số nguyên
# Conversion from 1D to 2D array
img.shape = [img.size // COLS, COLS]
print["New dimension of the array:", img.ndim]
print["----------------------------------------------------"]
print[" The 2D array of the original image is: \n", img]
print["----------------------------------------------------"]
print["The shape of the original image array is: ", img.shape]
Khi thực hiện điều này, bạn sẽ nhận được
New dimension of the array: 2
----------------------------------------------------
The 2D array of the original image is:
[[240 240 240 .. 230 230 230]
[240 240 239 .. 230 229 229]
[240 239 238 .. 231 232 232]
..
[ 50 50 50 .. 50 50 50]
[ 50 50 50 .. 50 50 50]
[ 50 50 50 .. 50 50 50]]
----------------------------------------------------
The shape of the original image array is: [1000, 1600]
Lưu hình ảnh mới vào một tệp mới ở định dạng thô
# Save the output image
print[".. Save the output image"]
img.astype['int8'].tofile['NewImage.raw']
print[".. File successfully saved"]
# Closing the file
fin.close[]
Đây là cách bạn lưu hình ảnh mới ở định dạng thô. Điều này sẽ được lưu trong hệ thống cục bộ của bạn
.. Save the output image
.. File successfully saved
Ghi chú. Trong khi nhập các hàng và cột của hình ảnh. Ví dụ: nếu độ phân giải của hình ảnh là 1600x1000, thì điều đó có nghĩa là chiều rộng là 1600 và chiều cao là 1000. Tương tự như trong chương trình trên, các hàng sẽ là 1000 và các cột sẽ là 1600
đầu ra
Khi thực hiện thành công đoạn mã trên, bây giờ bạn có thể đọc hình ảnh thô và sau đó lưu hình ảnh thô. vâng. Bây giờ nếu bạn không tin tôi, bạn có thể mở hình ảnh đã lưu bằng một số công cụ mở hình ảnh trực tuyến [hoặc bất kỳ công cụ nào]. Tôi thường sử dụng photopea, và đây là những gì tôi nhận được
Ảnh của Tanu Nanda Prabhu
Xin lưu ý, ở trên là ảnh chụp màn hình của đầu ra cùng với công cụ, hình ảnh đầu ra chính là thang độ xám có tên là “Barbara” [một người phụ nữ giơ một tay lên hoặc bất cứ thứ gì]
Phần kết luận
Trước khi rời đi, hãy thử đọc ảnh với các định dạng khác như JPEG [JPG], PNG và xem bạn nhận được giá trị nào. Ngoài ra, hãy thử đọc một hình ảnh màu [RGB]. Dù sao, bây giờ bạn có thể dễ dàng trả lời câu hỏi trên khi bắt đầu hướng dẫn. Để tôi nhắc bạn lần nữa. “Hình ảnh được tạo thành từ cái gì?”. Câu trả lời như các bạn đã thấy, “Hình ảnh được tạo thành từ một mảng các giá trị pixel”. Số lượng giá trị phụ thuộc vào các hàng và cột của hình ảnh đã cho
Đó là tất cả cho ngày hôm nay, tôi hy vọng các bạn thích đọc hướng dẫn “Đọc một hình ảnh bằng Python [Không sử dụng các thư viện đặc biệt]”. Như đã hứa, tôi không sử dụng bất kỳ thư viện nào khác ngoài
# For example a particular image in this case would contain [512*512] rows and columns meaning 262,144 pixels0. Chà, duh. bạn cần sử dụng
ROWS = 512
COLS = 512# Different images have different dimensions. Change it accordingly
# For example a particular image in this case would contain [512*512] rows and columns meaning 262,144 pixels0 để xử lý mảng. Nếu các bạn có bất kỳ nhận xét hoặc thắc mắc nào về hướng dẫn, hãy cho tôi biết trong phần bình luận bên dưới. Cho đến lúc đó tạm biệt, giữ an toàn. ]
ROWS = 512
COLS = 512# Different images have different dimensions. Change it accordingly