Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Khi bạn nhìn vào một hình ảnh, bạn sẽ thấy các đồ vật và con người trong đó. Tuy nhiên, khi bạn đọc một hình ảnh theo chương trình bằng Python hoặc bất kỳ ngôn ngữ nào khác, máy tính sẽ thấy một dãy số. Trong hướng dẫn này, bạn sẽ học cách thao tác với hình ảnh và thực hiện xử lý hình ảnh cơ bản bằng thư viện Gối Python

Show

Gối và tiền thân của nó, PIL, là các thư viện Python gốc để xử lý hình ảnh. Mặc dù có các thư viện Python khác để xử lý ảnh, Gối vẫn là một công cụ quan trọng để hiểu và xử lý ảnh

Để thao tác và xử lý hình ảnh, Gối cung cấp các công cụ tương tự như các công cụ được tìm thấy trong phần mềm xử lý hình ảnh như Photoshop. Một số thư viện xử lý ảnh Python hiện đại hơn được xây dựng trên Gối và thường cung cấp chức năng nâng cao hơn

Trong hướng dẫn này, bạn sẽ học cách

  • Đọc hình ảnh với Gối
  • Thực hiện các thao tác thao tác hình ảnh cơ bản
  • Sử dụng Gối để xử lý ảnh
  • Sử dụng NumPy với Gối để xử lý thêm
  • Tạo ảnh động bằng Gối

Hướng dẫn này cung cấp tổng quan về những gì bạn có thể đạt được với thư viện Gối Python thông qua một số phương thức phổ biến nhất của nó. Khi bạn đã tự tin sử dụng các phương pháp này, thì bạn có thể sử dụng tài liệu của Gối để khám phá các phương pháp còn lại trong thư viện. Nếu bạn chưa từng làm việc với hình ảnh trong Python trước đây, thì đây là cơ hội tuyệt vời để tham gia ngay

Trong hướng dẫn này, bạn sẽ sử dụng một số hình ảnh mà bạn có thể tải xuống từ kho lưu trữ hình ảnh của hướng dẫn

Nhận hình ảnh. Nhấp vào đây để truy cập vào các hình ảnh mà bạn sẽ thao tác và xử lý với Gối

Với những hình ảnh đó trong tay, giờ bạn đã sẵn sàng để bắt đầu với Gối

Thao tác hình ảnh cơ bản với thư viện gối Python

Thư viện Gối Python là một nhánh của thư viện cũ hơn có tên là PIL. PIL là viết tắt của Python Imaging Library, và nó là thư viện ban đầu cho phép Python xử lý hình ảnh. PIL đã ngừng hoạt động vào năm 2011 và chỉ hỗ trợ Python 2. Để sử dụng mô tả riêng của nhà phát triển, Gối là ngã ba PIL thân thiện giúp thư viện tồn tại và bao gồm hỗ trợ cho Python 3

Có nhiều mô-đun trong Python để xử lý hình ảnh và thực hiện xử lý hình ảnh. Nếu bạn muốn xử lý hình ảnh trực tiếp bằng cách thao tác với pixel của chúng, thì bạn có thể sử dụng NumPy và SciPy. Các thư viện phổ biến khác để xử lý ảnh là OpenCV, scikit-image và Mahotas. Một số thư viện này nhanh hơn và mạnh hơn Gối

Tuy nhiên, Gối vẫn là một công cụ quan trọng để xử lý hình ảnh. Nó cung cấp các tính năng xử lý hình ảnh tương tự như các tính năng được tìm thấy trong phần mềm xử lý hình ảnh như Photoshop. Gối thường là tùy chọn ưa thích cho các tác vụ xử lý hình ảnh cấp cao không yêu cầu chuyên môn xử lý hình ảnh nâng cao hơn. Nó cũng thường được sử dụng cho công việc khám phá khi xử lý hình ảnh

Gối cũng có lợi thế là được cộng đồng Python sử dụng rộng rãi và nó không có đường cong học tập dốc như một số thư viện xử lý ảnh khác

Bạn sẽ cần cài đặt thư viện trước khi có thể sử dụng nó. Bạn có thể cài đặt Gối bằng cách sử dụng

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
4 trong môi trường ảo

PS> python -m venv venv
PS> .\venv\Scripts\activate
(venv) PS> python -m pip install Pillow

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow

Bây giờ bạn đã cài đặt gói này, bạn đã sẵn sàng bắt đầu làm quen với thư viện Gối Python và thực hiện các thao tác cơ bản với hình ảnh

Loại bỏ các quảng cáo

Mô-đun >>> cropped_img = img.crop((300, 150, 700, 1000)) >>> cropped_img.size (400, 850) >>> cropped_img.show() >>> low_res_img = cropped_img.resize( .. (cropped_img.width // 4, cropped_img.height // 4) .. ) >>> low_res_img.show() 5 và Lớp học >>> cropped_img = img.crop((300, 150, 700, 1000)) >>> cropped_img.size (400, 850) >>> cropped_img.show() >>> low_res_img = cropped_img.resize( .. (cropped_img.width // 4, cropped_img.height // 4) .. ) >>> low_res_img.show() 5 trong Gối

Lớp chính được định nghĩa trong Gối là lớp

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5. Khi bạn đọc một hình ảnh bằng Gối, hình ảnh được lưu trữ trong một đối tượng kiểu
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5

Đối với mã trong phần này, bạn sẽ cần tệp hình ảnh có tên

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
9 (tín dụng hình ảnh), bạn có thể tìm thấy tệp này trong kho lưu trữ hình ảnh cho hướng dẫn này

Nhận hình ảnh. Nhấp vào đây để truy cập vào các hình ảnh mà bạn sẽ thao tác và xử lý với Gối

Bạn có thể đặt tệp hình ảnh này vào thư mục dự án mà bạn đang làm việc

Khi khám phá hình ảnh bằng Gối, tốt nhất nên sử dụng môi trường REPL tương tác. Bạn sẽ bắt đầu bằng cách mở hình ảnh mà bạn vừa tải xuống

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True

Bạn có thể muốn nhập từ Gối thay vì từ PIL. Rốt cuộc, bạn đã cài đặt

>>> low_res_img = cropped_img.reduce(4)
0, không phải
>>> low_res_img = cropped_img.reduce(4)
1. Tuy nhiên, Gối là một nhánh của thư viện PIL. Do đó, bạn vẫn cần sử dụng
>>> low_res_img = cropped_img.reduce(4)
1 khi nhập vào mã của mình

Bạn gọi chức năng để đọc hình ảnh từ tệp và đọc hình ảnh vào bộ nhớ để có thể đóng tệp ngay bây giờ. Bạn sử dụng câu lệnh

>>> low_res_img = cropped_img.reduce(4)
5 để tạo trình quản lý bối cảnh nhằm đảm bảo tệp được đóng ngay khi không còn cần thiết nữa

Trong ví dụ này, đối tượng là một loại dành riêng cho hình ảnh JPEG, là một lớp con của lớp

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5, khi bạn xác nhận bằng lệnh gọi tới
>>> low_res_img = cropped_img.reduce(4)
7. Lưu ý rằng cả lớp và mô-đun nơi lớp được xác định đều có cùng tên,
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5. Bạn có thể hiển thị hình ảnh bằng cách sử dụng

>>>

>>> img.show()

Phương pháp

>>> low_res_img = cropped_img.reduce(4)
9 lưu hình ảnh dưới dạng tệp tạm thời và hiển thị nó bằng phần mềm gốc của hệ điều hành để xử lý hình ảnh. Khi bạn chạy mã ở trên, bạn sẽ thấy hình ảnh sau được hiển thị

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Trên một số hệ thống, gọi

>>> low_res_img = cropped_img.reduce(4)
9 sẽ chặn REPL cho đến khi bạn đóng hình ảnh. Điều này phụ thuộc vào hệ điều hành và phần mềm xem ảnh mặc định mà bạn đang sử dụng

Bạn sẽ cần làm quen với ba thuộc tính chính khi xử lý hình ảnh trong thư viện Gối Python. Bạn có thể khám phá những điều này bằng cách sử dụng các thuộc tính lớp

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5, và

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'

Định dạng của hình ảnh cho biết bạn đang xử lý loại hình ảnh nào. Trong trường hợp này, định dạng của hình ảnh là

>>> cropped_img.save("cropped_image.jpg")
>>> low_res_img.save("low_resolution_cropped_image.png")
6. Kích thước hiển thị chiều rộng và chiều cao của hình ảnh tính bằng pixel. Chế độ của hình ảnh này là
>>> cropped_img.save("cropped_image.jpg")
>>> low_res_img.save("low_resolution_cropped_image.png")
7. Bạn sẽ sớm tìm hiểu thêm về các chế độ

Thông thường, bạn có thể cần phải cắt và thay đổi kích thước hình ảnh. Lớp

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 có hai phương thức mà bạn có thể sử dụng để thực hiện các thao tác này và

>>>

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()

Đối số của

>>> cropped_img.save("cropped_image.jpg")
>>> low_res_img.save("low_resolution_cropped_image.png")
9 phải là một bộ 4 xác định các cạnh trái, trên, phải và dưới của vùng mà bạn muốn cắt. Cái được sử dụng trong Gối gán tọa độ (0, 0) cho pixel ở góc trên bên trái. Đây là cùng một hệ tọa độ thường được sử dụng cho hai chiều. 4-tuple đại diện cho phần sau của hình ảnh

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Hình ảnh mới mà

>>> cropped_img.save("cropped_image.jpg")
>>> low_res_img.save("low_resolution_cropped_image.png")
9 trả về trong mã ở trên có kích thước là
>>> converted_img = img.transpose(Image.FLIP_TOP_BOTTOM)
>>> converted_img.show()
3 pixel. Hình ảnh đã cắt chỉ hiển thị một trong các tòa nhà từ ảnh gốc

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Trong đoạn mã trên, bạn cũng thay đổi độ phân giải của hình ảnh đã cắt bằng cách sử dụng

>>> converted_img = img.transpose(Image.FLIP_TOP_BOTTOM)
>>> converted_img.show()
0, điều này cần một bộ dữ liệu làm đối số bắt buộc. Bộ mà bạn sử dụng làm đối số xác định chiều rộng và chiều cao mới của hình ảnh tính bằng pixel

Trong ví dụ trên, bạn đang đặt chiều rộng và chiều cao mới thành một phần tư giá trị ban đầu của chúng bằng cách sử dụng các thuộc tính (

>>> converted_img = img.transpose(Image.FLIP_TOP_BOTTOM)
>>> converted_img.show()
5) và
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 và. Cuộc gọi cuối cùng đến
>>> converted_img = img.transpose(Image.FLIP_TOP_BOTTOM)
>>> converted_img.show()
9 hiển thị hình ảnh đã cắt và thay đổi kích thước

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Có các tham số tùy chọn bổ sung mà bạn có thể sử dụng để kiểm soát cách hình ảnh được lấy mẫu lại. Ngoài ra, bạn có thể đạt được tỷ lệ tương tự bằng cách sử dụng

>>>

>>> low_res_img = cropped_img.reduce(4)

Đối số xác định yếu tố mà bạn thu nhỏ hình ảnh xuống. Nếu bạn muốn đặt kích thước tối đa thay vì hệ số tỷ lệ, thì bạn có thể sử dụng. Kích thước của hình thu nhỏ sẽ nhỏ hơn hoặc bằng kích thước mà bạn đặt

Ghi chú. Phương thức

>>> rotated_img = img.rotate(45)
>>> rotated_img.show()
2 thay đổi đối tượng
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 tại chỗ và không trả về đối tượng mới. Tuy nhiên,
>>> cropped_img.save("cropped_image.jpg")
>>> low_res_img.save("low_resolution_cropped_image.png")
9,
>>> converted_img = img.transpose(Image.FLIP_TOP_BOTTOM)
>>> converted_img.show()
0, và
>>> rotated_img = img.rotate(45)
>>> rotated_img.show()
1 đều trả về một đối tượng
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 mới. Không phải tất cả các phương thức trong thư viện Gối đều hoạt động theo cùng một cách

Khi bạn hài lòng với hình ảnh được trả lại của mình, bạn có thể lưu bất kỳ đối tượng nào trong số

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 vào tệp bằng cách sử dụng

>>>

>>> cropped_img.save("cropped_image.jpg")
>>> low_res_img.save("low_resolution_cropped_image.png")

Khi bạn gọi phương thức, nó sẽ tạo các tệp hình ảnh trong thư mục dự án của bạn. Trong ví dụ này, một trong các hình ảnh là hình ảnh JPEG và hình ảnh còn lại là hình ảnh PNG. Phần mở rộng mà bạn sử dụng làm tên tệp sẽ tự động xác định định dạng tệp hoặc bạn có thể chỉ định định dạng dưới dạng đối số tùy chọn bổ sung

Loại bỏ các quảng cáo

Thao tác hình ảnh cơ bản

Bạn có thể thao tác với hình ảnh ngoài việc cắt xén và thay đổi kích thước. Một yêu cầu phổ biến khác là xoay hoặc lật hình ảnh. Bạn có thể sử dụng phương pháp này cho một số biến đổi. Tiếp tục và tiếp tục với cùng một phiên REPL mà bạn đã bắt đầu trong phần trước

>>>

>>> converted_img = img.transpose(Image.FLIP_TOP_BOTTOM)
>>> converted_img.show()

Mã này hiển thị hình ảnh sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Có bảy tùy chọn mà bạn có thể chuyển làm đối số cho

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
01

  1. $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    03. Lật hình ảnh từ trái sang phải, dẫn đến hình ảnh phản chiếu
  2. $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    04. Lật hình ảnh từ trên xuống dưới
  3. $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    05. Xoay hình ảnh 90 độ ngược chiều kim đồng hồ
  4. $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    06. Xoay hình ảnh 180 độ
  5. $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    07. Xoay hình ảnh 270 độ ngược chiều kim đồng hồ, tương đương với 90 độ theo chiều kim đồng hồ
  6. $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    08. Chuyển vị trí các hàng và cột bằng cách sử dụng pixel trên cùng bên trái làm gốc, với pixel trên cùng bên trái trong hình ảnh được chuyển đổi giống như trong ảnh gốc
  7. $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    09. Chuyển vị trí các hàng và cột bằng cách sử dụng pixel dưới cùng bên trái làm điểm gốc, với pixel dưới cùng bên trái là điểm ảnh cố định giữa phiên bản gốc và phiên bản đã sửa đổi

Tất cả các tùy chọn xoay ở trên xác định các phép quay theo các bước 90 độ. Nếu bạn cần xoay hình ảnh theo một góc khác, thì bạn có thể sử dụng

>>>

>>> rotated_img = img.rotate(45)
>>> rotated_img.show()

Gọi phương thức này xoay hình ảnh 45 độ ngược chiều kim đồng hồ, cho hình ảnh sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Đối tượng

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 được trả về có cùng kích thước với đối tượng
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 ban đầu. Do đó, các góc của hình ảnh bị thiếu trong màn hình này. Bạn có thể thay đổi hành vi này bằng cách sử dụng tham số có tên
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
13

>>>

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
0

Phương thức này trả về một hình ảnh lớn hơn chứa đầy đủ hình ảnh đã xoay

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn có thể tùy chỉnh xoay hơn nữa với. Bây giờ bạn có thể thay đổi kích thước và hướng của hình ảnh. Trong phần tiếp theo, bạn sẽ tìm hiểu về các loại hình ảnh khác nhau trong thư viện Gối Python

Dải và Chế độ của Hình ảnh trong Thư viện Gối Python

Một hình ảnh là một mảng pixel hai chiều, trong đó mỗi pixel tương ứng với một màu. Mỗi pixel có thể được biểu thị bằng một hoặc nhiều giá trị. Ví dụ: trong một hình ảnh RGB, mỗi pixel được biểu thị bằng ba giá trị tương ứng với các giá trị đỏ, lục và lam cho pixel đó

Do đó, đối tượng

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 cho ảnh RBG chứa ba dải, mỗi dải cho một màu. Một hình ảnh RGB có kích thước
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
15 pixel được biểu thị bằng một mảng giá trị
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
16

Hình ảnh RGBA cũng bao gồm giá trị alpha, chứa thông tin về độ trong suốt của từng pixel. Một hình ảnh RGBA có bốn dải, một dải cho mỗi màu và dải thứ tư chứa các giá trị alpha. Mỗi dải có cùng kích thước với kích thước hình ảnh. Do đó, một hình ảnh RGBA có kích thước

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
15 pixel được biểu thị bằng một mảng giá trị
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
18

Chế độ của hình ảnh mô tả loại hình ảnh bạn đang làm việc với. Gối hỗ trợ hầu hết các chế độ tiêu chuẩn, bao gồm đen trắng (nhị phân), thang độ xám, RGB, RGBA và CMYK. Bạn có thể xem danh sách đầy đủ các chế độ được hỗ trợ trong tài liệu Gối trên

Bạn có thể biết có bao nhiêu dải trong một đối tượng

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 bằng cách sử dụng phương thức này và bạn có thể chuyển đổi giữa các chế độ bằng cách sử dụng. Bây giờ bạn sẽ sử dụng hình ảnh có tên
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
22 (nguồn hình ảnh) từ kho hình ảnh cho hướng dẫn này

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Chế độ của hình ảnh này cũng là RGB. Bạn có thể chuyển đổi hình ảnh này sang các chế độ khác. Mã này sử dụng cùng một phiên REPL mà bạn đã bắt đầu trong các phần trước

>>>

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
1

Bạn gọi

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
21 hai lần để chuyển đổi hình ảnh RGB thành CMYK và phiên bản thang độ xám. Hình ảnh CMYK trông tương tự như hình ảnh gốc nhưng được mã hóa bằng chế độ phổ biến cho tài liệu in hơn là màn hình kỹ thuật số. Việc chuyển đổi sang thang độ xám cho đầu ra sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Kết quả đầu ra từ các cuộc gọi đến

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
20 xác nhận rằng có ba dải trong ảnh RGB, bốn dải trong ảnh CMYK và một dải trong ảnh thang độ xám

Bạn có thể tách một hình ảnh thành các dải của nó bằng cách sử dụng và kết hợp các dải riêng biệt lại thành một đối tượng

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 bằng cách sử dụng. Khi bạn sử dụng
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
25, phương thức này trả về tất cả các dải dưới dạng các đối tượng
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 riêng biệt. Bạn có thể xác nhận điều này bằng cách hiển thị biểu diễn chuỗi của một trong các đối tượng được trả về

>>>

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
2

Chế độ của đối tượng mà

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
25 trả về là
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
31, cho biết đây là hình ảnh thang độ xám hoặc hình ảnh chỉ hiển thị các giá trị độ chói của từng pixel

Bây giờ, bạn có thể tạo ba hình ảnh RGB mới hiển thị các kênh màu đỏ, lục và lam riêng biệt bằng cách sử dụng

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
27, đây là một chức năng trong mô-đun
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5

>>>

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
3

Đối số đầu tiên trong

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
27 xác định chế độ của hình ảnh mà bạn muốn tạo. Đối số thứ hai chứa các dải riêng lẻ mà bạn muốn hợp nhất thành một hình ảnh duy nhất

Riêng dải màu đỏ, được lưu trữ trong biến

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
35, là một ảnh thang độ xám với chế độ L. Để tạo hình ảnh chỉ hiển thị kênh màu đỏ, bạn hợp nhất dải màu đỏ từ ảnh gốc với các dải màu lục và lam chỉ chứa các số không. Để tạo một dải chứa các số 0 ở mọi nơi, bạn sử dụng phương pháp
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
36

Phương thức này cần một hàm làm đối số. Hàm mà bạn sử dụng xác định cách mỗi điểm biến đổi. Trong trường hợp này, bạn sử dụng hàm

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
37 để ánh xạ từng điểm tới
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
38

Khi bạn hợp nhất dải màu đỏ với dải màu xanh lục và xanh lam chứa các số không, bạn sẽ nhận được hình ảnh RGB có tên là

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
39. Do đó, hình ảnh RGB mà bạn tạo chỉ có các giá trị khác 0 trong kênh màu đỏ, nhưng vì nó vẫn là hình ảnh RGB nên nó sẽ hiển thị màu

Bạn cũng lặp lại quy trình tương tự để có được

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
40 và
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
41, chứa hình ảnh RGB với các kênh màu lục và lam từ hình ảnh gốc. Mã hiển thị ba hình ảnh sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Hình ảnh màu đỏ chứa tín hiệu mạnh trong các pixel đại diện cho quả dâu tây, vì các pixel này chủ yếu là màu đỏ. Các kênh màu lục và lam hiển thị các pixel này tối vì chúng có giá trị nhỏ. Các trường hợp ngoại lệ là những pixel đại diện cho sự phản chiếu ánh sáng trên bề mặt của quả dâu tây vì những pixel này gần như trắng

Tạo các màn hình cạnh nhau được hiển thị trong hướng dẫn nàyHiển thị/Ẩn

Trong hướng dẫn này, khi có một số hình ảnh đầu ra trong mã cần được hiển thị cạnh nhau để so sánh dễ dàng hơn, các hình ảnh được hiển thị cạnh nhau thay vì dưới dạng các hình ảnh riêng biệt

Các màn hình cạnh nhau này được tạo bằng chính Gối. Bạn có thể sử dụng chức năng

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
42, hiển thị bên dưới, để hợp nhất một số hình ảnh vào một màn hình duy nhất

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
4

Tham số đầu tiên trong

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
42 sử dụng toán tử (
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
44) để có thể sử dụng bất kỳ số lượng đối tượng nào thuộc loại
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
45 làm đối số đầu vào. Tham số từ khóa
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
46 có thể được đặt thành
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
47 nếu bạn muốn xếp hình ảnh theo chiều dọc thay vì theo chiều ngang. Chức năng này giả định rằng tất cả các hình ảnh có cùng kích thước

Kích thước tổng thể của màn hình được tính từ kích thước của hình ảnh và số lượng hình ảnh được sử dụng. Sau đó, bạn tạo một đối tượng

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 mới có cùng chế độ với hình ảnh ban đầu và với kích thước của màn hình tổng thể

Vòng lặp

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
49 dán hình ảnh mà bạn nhập vào khi gọi hàm vào màn hình cuối cùng. Hàm trả về đối tượng
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 cuối cùng chứa tất cả các hình ảnh cạnh nhau

Hình ảnh trong bài viết chính hiển thị ba kênh màu cho hình ảnh quả dâu tây được lấy bằng cách gọi hàm

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
42 như sau

>>>

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
5

Chức năng này được sử dụng để tạo tất cả các màn hình hiển thị nhiều hơn một hình ảnh trong hướng dẫn này

Loại bỏ các quảng cáo

Xử lý ảnh bằng Gối trong Python

Bạn đã học cách cắt và xoay hình ảnh, thay đổi kích thước và trích xuất các dải màu từ hình ảnh màu. Tuy nhiên, không có hành động nào bạn đã thực hiện cho đến nay đã thực hiện bất kỳ thay đổi nào đối với nội dung của hình ảnh. Trong phần này, bạn sẽ tìm hiểu về các tính năng xử lý ảnh trong thư viện Python Pillow. Bạn sẽ sử dụng mô-đun trong Gối

Bộ lọc hình ảnh sử dụng Convolution Kernels

Một trong những phương pháp được sử dụng trong xử lý ảnh là tích chập ảnh sử dụng hạt nhân. Mục đích của hướng dẫn này không phải là giải thích chi tiết về lý thuyết xử lý ảnh. Nếu bạn quan tâm đến khoa học xử lý hình ảnh, một trong những tài nguyên tốt nhất mà bạn có thể sử dụng là Xử lý hình ảnh kỹ thuật số của Gonzalez và Woods

Trong phần này, bạn sẽ tìm hiểu kiến ​​thức cơ bản về cách bạn có thể sử dụng hạt tích chập để thực hiện xử lý ảnh. Nhưng hạt nhân tích chập là gì?

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn có thể xem xét một hình ảnh đơn giản để hiểu quá trình tích chập sử dụng hạt nhân. Hình ảnh có kích thước

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
53 pixel và chứa một đường thẳng đứng và một dấu chấm. Đường rộng 4 pixel và dấu chấm bao gồm một hình vuông
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
54 pixel. Hình ảnh dưới đây được phóng to cho mục đích hiển thị

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn có thể đặt hạt nhân ở bất cứ đâu trên hình ảnh và sử dụng vị trí của ô trung tâm của hạt nhân làm tham chiếu. Sơ đồ dưới đây là một đại diện của phần trên cùng bên trái của hình ảnh

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Các thành phần trong sơ đồ này biểu thị các khía cạnh khác nhau của hình ảnh và nhân

  • Các ô vuông màu trắng biểu thị các pixel trong hình ảnh có giá trị là
    $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    38
  • Các ô vuông màu đỏ biểu thị các pixel trong ảnh có giá trị là
    $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    56. Chúng tạo nên dấu chấm trong hình trên
  • Mỗi vùng màu tím đại diện cho hạt nhân. Hạt nhân này bao gồm một vùng
    $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    57 và mỗi ô trong hạt nhân có giá trị là
    $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install Pillow
    
    58. Sơ đồ cho thấy hạt nhân ở ba vị trí khác nhau được dán nhãn 1, 2 và 3

Một hình ảnh mới có thể được tạo ra do sự tích chập của hình ảnh với nhân. Bạn có thể hiểu quy trình tích chập qua các bước sau

  1. xác định vị trí hạt nhân. Hãy xem xét một trong các vị trí của nhân và xem các pixel hình ảnh được bao phủ bởi chín ô của nhân
  2. Nhân các giá trị kernel và pixel. Nhân các giá trị trong mỗi ô của hạt nhân với các giá trị pixel tương ứng trong ảnh. Bạn sẽ có chín giá trị từ chín phép nhân
  3. Tổng kết quả của phép nhân. Cộng chín giá trị đó lại với nhau. Kết quả sẽ là giá trị của pixel trong ảnh mới có cùng tọa độ với pixel trung tâm của kernel
  4. Lặp lại cho tất cả các pixel. Lặp lại quy trình cho mọi pixel trong ảnh, di chuyển hạt nhân mỗi lần để ô trung tâm của hạt nhân tương ứng với một pixel hình ảnh khác nhau mỗi lần

Bạn có thể thấy quá trình này với ba vị trí nhân có nhãn 1, 2 và 3 trong sơ đồ trên. Xem xét vị trí hạt nhân có nhãn 1. Vị trí của hạt nhân này là

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
59, là vị trí của ô trung tâm của nó vì nó nằm ở hàng thứ tư (chỉ mục =
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
60) và cột thứ ba (chỉ mục =
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
61). Mỗi pixel hình ảnh trong vùng được bao phủ bởi hạt nhân có giá trị bằng không

Do đó, tất cả các phép nhân từ bước 2 sẽ bằng 0 và phép cộng của chúng cũng sẽ bằng 0. Hình ảnh mới sẽ có giá trị bằng 0 tại pixel

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
59

Kịch bản khác đối với các vị trí hạt nhân khác được hiển thị. Tiếp theo, xem xét hạt nhân có nhãn 2, nằm ở

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
63. Một trong những pixel hình ảnh chồng lên nhau, đây không phải là số không. Phép nhân của giá trị pixel này với giá trị kernel sẽ cho _______2_______64. Tám phép nhân còn lại vẫn bằng không vì pixel hình ảnh bằng không. Do đó, giá trị của pixel tại vị trí
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
63 trong ảnh mới sẽ là
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
66

Vị trí nhân thứ ba được minh họa ở trên là tại

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
67. Có bốn pixel hình ảnh khác không chồng chéo với hạt nhân này. Mỗi cái có giá trị là
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
56, vì vậy kết quả phép nhân sẽ lại là
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
66 cho mỗi vị trí pixel đó. Kết quả tổng thể cho vị trí hạt nhân này là
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
70. Hình ảnh mới sẽ có giá trị này tại
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
67

Sơ đồ và cuộc thảo luận ở trên chỉ xem xét ba vị trí hạt nhân. Quá trình tích chập lặp lại quá trình này cho mọi vị trí hạt nhân có thể có trong ảnh. Điều này mang lại một giá trị cho từng vị trí pixel trong hình ảnh mới

Kết quả của tích chập được hiển thị ở bên phải trong hình ảnh sau, với hình ảnh gốc ở bên trái

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Hạt nhân mà bạn đã sử dụng là hạt nhân làm mờ hộp. Thừa số của

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
58 ở đó sao cho tổng trọng số của hạt nhân là
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
73. Kết quả của phép tích chập là một phiên bản mờ của ảnh gốc. Có các nhân khác thực hiện các chức năng khác nhau, bao gồm các phương pháp làm mờ khác nhau, phát hiện cạnh, làm sắc nét, v.v.

Thư viện Gối Python có một số hàm và hạt nhân tích hợp sẽ thực hiện phép tích chập được mô tả ở trên. Bạn không cần phải hiểu toán học lọc thông qua tích chập để sử dụng các bộ lọc này, nhưng sẽ luôn hữu ích khi biết điều gì đang xảy ra đằng sau hậu trường khi sử dụng các công cụ này

Các phần tiếp theo sẽ xem xét các hạt nhân và khả năng lọc hình ảnh có sẵn trong mô-đun

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
52 trong Gối

Loại bỏ các quảng cáo

Làm mờ, làm sắc nét và làm mịn hình ảnh

Bạn sẽ quay lại sử dụng hình ảnh của các tòa nhà mà bạn đã sử dụng ở phần đầu của hướng dẫn này. Bạn có thể bắt đầu một phiên REPL mới cho phần này

>>>

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
6

Ngoài

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5, bạn cũng nhập mô-đun
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
52 từ Gối. Bạn có thể sử dụng phương pháp để áp dụng bộ lọc cho hình ảnh. Phương thức này cần một hạt nhân tích chập làm đối số của nó và bạn có thể sử dụng một trong số các hạt nhân có sẵn trong mô-đun trong Gối. Bộ bộ lọc đầu tiên mà bạn sẽ tìm hiểu về xử lý làm mờ, làm sắc nét và làm mịn hình ảnh

Bạn có thể làm mờ hình ảnh bằng cách sử dụng bộ lọc

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
79 được xác định trước

>>>

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
7

Hình ảnh hiển thị là phiên bản mờ của hình ảnh gốc. Bạn có thể phóng to để quan sát sự khác biệt chi tiết hơn bằng cách sử dụng

>>> cropped_img.save("cropped_image.jpg")
>>> low_res_img.save("low_resolution_cropped_image.png")
9 và sau đó hiển thị lại hình ảnh bằng cách sử dụng
>>> low_res_img = cropped_img.reduce(4)
9

>>>

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
8

Hai hình ảnh được crop cho thấy sự khác biệt giữa hai phiên bản

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn có thể tùy chỉnh loại và mức độ làm mờ mà bạn cần bằng cách sử dụng hoặc

>>>

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
9

Bạn có thể thấy ba hình ảnh mờ bên dưới, được hiển thị theo thứ tự như trong đoạn mã trên

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bộ lọc

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
84 tương tự như bộ lọc được mô tả trong phần trước giới thiệu hạt tích chập. Đối số là bán kính của bộ lọc làm mờ hộp. Trong phần trước thảo luận về hạt nhân, bộ lọc làm mờ hộp mà bạn đã sử dụng là bộ lọc
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
57. Điều này có nghĩa là nó có bán kính là
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
73, bởi vì bộ lọc mở rộng thêm một pixel từ tâm

Hình ảnh bị mờ cho thấy bộ lọc làm mờ hộp có bán kính

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
87 tạo ra hình ảnh mờ hơn hình ảnh được tạo bởi bộ lọc làm mờ hộp có bán kính
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
88

Bạn cũng có thể sử dụng bộ lọc

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
89, sử dụng nhân làm mờ Gaussian. Hạt nhân Gaussian đặt nhiều trọng lượng hơn lên các pixel ở trung tâm của hạt nhân so với các điểm ảnh ở các cạnh và điều này dẫn đến hiệu ứng làm mờ mượt mà hơn so với những gì thu được với hiệu ứng làm mờ hộp. Vì lý do này, làm mờ Gaussian có thể cho kết quả tốt hơn trong nhiều trường hợp

Nếu bạn muốn làm sắc nét một hình ảnh thì sao?

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
0

Bạn đang so sánh phiên bản đã cắt của cả hai hình ảnh hiển thị một phần nhỏ của tòa nhà. Hình ảnh được làm sắc nét ở bên phải

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Có lẽ thay vì làm sắc nét một hình ảnh, bạn cần làm mịn nó. Bạn có thể đạt được điều này bằng cách chuyển

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
91 làm đối số cho
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
77

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
1

Dưới đây, bạn có thể thấy hình ảnh gốc ở bên trái và hình ảnh được làm mịn ở bên phải

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn sẽ thấy ứng dụng của bộ lọc mịn trong phần tiếp theo, trong đó bạn sẽ tìm hiểu về nhiều bộ lọc hơn trong mô-đun

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
52. Các bộ lọc này hoạt động trên các cạnh của đối tượng trong ảnh

Loại bỏ các quảng cáo

Phát hiện cạnh, Tăng cường cạnh và Dập nổi

Khi bạn nhìn vào một hình ảnh, việc xác định các cạnh của các đối tượng trong hình ảnh đó tương đối dễ dàng. Thuật toán cũng có thể tự động phát hiện các cạnh bằng cách sử dụng các nhân phát hiện cạnh

Mô-đun

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
52 trong Gối có nhân được xác định trước để đạt được điều này. Trong phần này, bạn sẽ sử dụng lại hình ảnh của các tòa nhà và chuyển đổi nó thành thang độ xám trước khi áp dụng bộ lọc phát hiện cạnh. Bạn có thể tiếp tục với phiên REPL từ phần trước

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
2

Kết quả là một hình ảnh hiển thị các cạnh từ hình ảnh gốc

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bộ lọc này xác định các cạnh trong ảnh. Bạn có thể đạt được kết quả tốt hơn bằng cách áp dụng bộ lọc

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
91 trước khi tìm các cạnh

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
3

Bạn có thể xem so sánh hình ảnh thang độ xám ban đầu và kết quả phát hiện hai cạnh bên dưới. Phiên bản làm mịn trước khi phát hiện cạnh được hiển thị ở dưới cùng

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn cũng có thể cải thiện các cạnh của ảnh gốc bằng bộ lọc

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
96

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
4

Bạn đã sử dụng phiên bản được làm mịn của hình ảnh thang độ xám để tăng cường các cạnh. Một phần của hình ảnh thang độ xám ban đầu và hình ảnh với các cạnh được tăng cường được hiển thị cạnh nhau bên dưới. Hình ảnh với tăng cường cạnh ở bên phải

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Một bộ lọc được xác định trước khác trong

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
52 xử lý các cạnh của đối tượng là
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
98. Bạn có thể chuyển nó dưới dạng đối số cho
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
77 như bạn đã làm với các bộ lọc khác trong phần này

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
5

Bạn đang sử dụng phiên bản thang độ xám, được làm mịn làm điểm bắt đầu cho bộ lọc này. Bạn có thể xem hình ảnh nổi bên dưới, cho thấy hiệu ứng khác khi sử dụng các cạnh trong hình ảnh

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Trong phần này, bạn đã tìm hiểu về một số bộ lọc có sẵn trong mô-đun

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
52 mà bạn có thể áp dụng cho hình ảnh. Có các bộ lọc khác mà bạn có thể sử dụng để xử lý hình ảnh. Bạn có thể xem danh sách tất cả các bộ lọc có sẵn trong

Phân đoạn và chồng chất hình ảnh. Một ví dụ

Trong phần này, bạn sẽ sử dụng các tệp hình ảnh có tên

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
02 (tín dụng hình ảnh) và
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
03 (tín dụng hình ảnh), mà bạn có thể tìm thấy trong kho lưu trữ hình ảnh cho hướng dẫn này

Nhận hình ảnh. Nhấp vào đây để truy cập vào các hình ảnh mà bạn sẽ thao tác và xử lý với Gối

Đây là hai hình ảnh

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?
Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn có thể sử dụng thư viện Gối Python để trích xuất con mèo từ hình ảnh đầu tiên và đặt nó trên sàn của sân tu viện. Bạn sẽ sử dụng một số kỹ thuật xử lý hình ảnh để đạt được điều này

Loại bỏ các quảng cáo

Ngưỡng hình ảnh

Bạn sẽ bắt đầu bằng cách làm việc trên

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
02. Bạn sẽ cần xóa hình ảnh con mèo khỏi nền bằng kỹ thuật phân đoạn hình ảnh. Trong ví dụ này, bạn sẽ phân đoạn hình ảnh bằng kỹ thuật tạo ngưỡng

Trước tiên, bạn có thể cắt ảnh thành ảnh nhỏ hơn để loại bỏ một số nền. Bạn có thể bắt đầu phiên REPL mới cho dự án này

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
6

Hình ảnh đã cắt có con mèo và một số nền quá gần con mèo để bạn có thể cắt nó

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Mỗi pixel trong một hình ảnh màu được biểu thị bằng kỹ thuật số bằng ba số tương ứng với các giá trị màu đỏ, lục và lam của pixel đó. Ngưỡng là quá trình chuyển đổi tất cả các pixel thành giá trị tối đa hoặc tối thiểu tùy thuộc vào việc chúng cao hơn hay thấp hơn một số nhất định. Nó dễ dàng hơn để làm điều này trên một hình ảnh thang độ xám

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
7

Bạn đạt được ngưỡng bằng cách gọi

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
36 để chuyển đổi từng pixel trong ảnh thang độ xám thành
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
56 hoặc
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
38. Việc chuyển đổi phụ thuộc vào việc giá trị trong ảnh thang độ xám lớn hơn hay nhỏ hơn giá trị ngưỡng. Giá trị ngưỡng trong ví dụ này là
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
08

Hình bên dưới hiển thị ảnh thang độ xám và kết quả từ quá trình tạo ngưỡng

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Trong ví dụ này, tất cả các điểm trong ảnh thang độ xám có giá trị pixel lớn hơn

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
08 được chuyển thành màu trắng và tất cả các pixel khác được chuyển thành màu đen. Bạn có thể thay đổi độ nhạy của quy trình tạo ngưỡng bằng cách thay đổi giá trị ngưỡng

Ngưỡng có thể được sử dụng để phân đoạn hình ảnh khi đối tượng để phân đoạn khác biệt với nền. Bạn có thể đạt được kết quả tốt hơn với các phiên bản của ảnh gốc có độ tương phản cao hơn. Trong ví dụ này, bạn có thể đạt được độ tương phản cao hơn bằng cách ngưỡng kênh màu lam của ảnh gốc thay vì ảnh thang độ xám, vì màu chủ đạo trong nền là màu nâu và xanh lá cây, có thành phần xanh lam yếu

Bạn có thể trích xuất các kênh màu đỏ, lục và lam từ ảnh màu như bạn đã làm trước đó

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
8

Các kênh màu đỏ, lục và lam được hiển thị bên dưới, từ trái sang phải. Cả ba được hiển thị dưới dạng hình ảnh thang độ xám

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Kênh màu xanh lam có độ tương phản cao hơn giữa các pixel đại diện cho con mèo và các pixel đại diện cho nền. Bạn có thể sử dụng hình ảnh kênh màu xanh lam để ngưỡng

>>>

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
9

Bạn sử dụng giá trị ngưỡng là

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
10 trong ví dụ này. Bạn cũng chuyển đổi hình ảnh thành chế độ nhị phân bằng cách sử dụng
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
11 làm đối số cho
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
21. Các pixel trong ảnh nhị phân chỉ có thể có các giá trị là
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
38 hoặc
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
73

Ghi chú. Khi xử lý một số định dạng hình ảnh nhất định, chẳng hạn như JPEG, dựa trên cơ chế nén giảm dữ liệu, hình ảnh có thể thay đổi đôi chút tùy thuộc vào bộ giải mã JPEG mà bạn đang sử dụng. Các hệ điều hành khác nhau thường đi kèm với các bộ giải mã JPEG mặc định khác nhau. Do đó, kết quả mà bạn nhận được khi xử lý hình ảnh có thể khác nhau tùy thuộc vào hệ điều hành và bộ giải mã JPEG mà bạn đang sử dụng

Bạn có thể cần điều chỉnh một chút giá trị ngưỡng nếu kết quả của bạn không khớp với kết quả được hiển thị trong hướng dẫn này

Kết quả của ngưỡng như sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn có thể xác định con mèo trong hình ảnh đen trắng này. Tuy nhiên, bạn muốn có một hình ảnh trong đó tất cả các pixel tương ứng với con mèo đều có màu trắng và tất cả các pixel khác có màu đen. Trong hình ảnh này, bạn vẫn có các vùng màu đen trong khu vực tương ứng với con mèo, chẳng hạn như vị trí của mắt, mũi và miệng, đồng thời bạn vẫn có các điểm ảnh màu trắng ở những nơi khác trong hình ảnh

Bạn có thể sử dụng các kỹ thuật xử lý hình ảnh được gọi là xói mòn và giãn nở để tạo mặt nạ tốt hơn đại diện cho con mèo. Bạn sẽ tìm hiểu về hai kỹ thuật này trong phần tiếp theo

Loại bỏ các quảng cáo

Xói mòn và giãn nở

Bạn có thể xem tệp hình ảnh có tên là

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
15, tệp này bạn có thể tải xuống từ kho lưu trữ được liên kết với hướng dẫn này

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Phía bên trái của hình ảnh nhị phân này hiển thị một chấm trắng trên nền đen, trong khi phía bên phải hiển thị một lỗ đen trong một phần màu trắng

Xói mòn là quá trình loại bỏ các pixel trắng khỏi ranh giới trong ảnh. Bạn có thể đạt được điều này trong một hình ảnh nhị phân bằng cách sử dụng

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
16 làm đối số cho phương thức
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
77. Bộ lọc này thay thế giá trị của một pixel bằng giá trị nhỏ nhất của chín pixel trong mảng
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
57 tập trung xung quanh pixel. Trong ảnh nhị phân, điều này có nghĩa là một pixel sẽ có giá trị bằng 0 nếu bất kỳ pixel lân cận nào của nó bằng 0

Bạn có thể thấy hiệu ứng xói mòn bằng cách áp dụng

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
16 nhiều lần vào hình ảnh
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
15. Bạn nên tiếp tục với phiên REPL giống như trong phần trước

>>>

>>> img.show()
0

Bạn đã áp dụng bộ lọc ba lần bằng cách sử dụng vòng lặp

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
49. Mã này cho đầu ra sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Dấu chấm đã thu nhỏ lại nhưng cái lỗ đã lớn lên do xói mòn

Giãn nở là quá trình ngược lại với xói mòn. Các pixel trắng được thêm vào các ranh giới trong ảnh nhị phân. Bạn có thể đạt được sự giãn nở bằng cách sử dụng

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
22, chuyển đổi một pixel thành màu trắng nếu bất kỳ pixel lân cận nào của nó có màu trắng

Bạn có thể áp dụng phép giãn cho cùng một hình ảnh chứa dấu chấm và lỗ, bạn có thể mở và tải lại các ảnh này

>>>

>>> img.show()
1

Dấu chấm bây giờ đã lớn hơn và lỗ đã thu hẹp lại

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn có thể sử dụng sự xói mòn và sự giãn nở cùng nhau để lấp đầy các lỗ hổng và loại bỏ các đối tượng nhỏ khỏi hình ảnh nhị phân. Sử dụng hình ảnh có chấm và lỗ, bạn có thể thực hiện mười chu kỳ xói mòn để loại bỏ chấm, tiếp theo là mười chu kỳ giãn nở để khôi phục lỗ về kích thước ban đầu

>>>

>>> img.show()
2

Bạn thực hiện mười chu kỳ xói mòn với vòng lặp

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
49 đầu tiên. Hình ảnh ở giai đoạn này như sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Dấu chấm đã biến mất và lỗ hổng lớn hơn so với trong ảnh gốc. Vòng lặp

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
49 thứ hai thực hiện mười chu kỳ giãn nở, đưa lỗ trở về kích thước ban đầu

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Tuy nhiên, dấu chấm không còn xuất hiện trong hình ảnh. Sự xói mòn và giãn nở đã sửa đổi hình ảnh để giữ lại cái lỗ nhưng loại bỏ dấu chấm. Số lượng xói mòn và giãn nở cần thiết tùy thuộc vào hình ảnh và những gì bạn muốn đạt được. Thông thường, bạn sẽ cần tìm sự kết hợp phù hợp thông qua thử và sai

Bạn có thể xác định các chức năng để thực hiện một số chu kỳ xói mòn và giãn nở

>>>

>>> img.show()
3

Các chức năng này giúp thử nghiệm xói mòn và giãn nở cho hình ảnh dễ dàng hơn. Bạn sẽ sử dụng các chức năng này trong phần tiếp theo khi tiếp tục đặt con mèo vào tu viện

Loại bỏ các quảng cáo

Phân đoạn hình ảnh bằng cách sử dụng ngưỡng

Bạn có thể sử dụng một chuỗi các phép xóa và giãn trên hình ảnh ngưỡng mà bạn đã thu được trước đó để loại bỏ các phần của mặt nạ không đại diện cho con mèo và để lấp đầy bất kỳ khoảng trống nào trong vùng chứa con mèo. Khi bạn đã thử nghiệm với sự xói mòn và giãn nở, bạn sẽ có thể sử dụng các phỏng đoán đã học trong quy trình thử và sai để tìm ra sự kết hợp tốt nhất giữa xói mòn và giãn nở để đạt được mặt nạ lý tưởng

Bắt đầu với hình ảnh

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
25 mà bạn đã thu được trước đó, bạn có thể bắt đầu với một loạt các vết xói mòn để loại bỏ các điểm ảnh màu trắng đại diện cho nền trong ảnh gốc. Bạn nên tiếp tục làm việc trong cùng một phiên REPL như trong các phần trước

>>>

>>> img.show()
4

Hình ảnh ngưỡng bị xói mòn không còn chứa các pixel trắng đại diện cho nền của hình ảnh

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Tuy nhiên, chiếc mặt nạ còn lại nhỏ hơn so với đường viền tổng thể của con mèo và có các lỗ hổng bên trong. Bạn có thể thực hiện giãn nở để lấp đầy khoảng trống

>>>

>>> img.show()
5

Năm mươi tám chu kỳ giãn nở lấp đầy tất cả các lỗ trên mặt nạ để cho hình ảnh sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Tuy nhiên, mặt nạ này là quá lớn. Do đó, bạn có thể kết thúc quá trình với một loạt các xói mòn

>>>

>>> img.show()
6

Kết quả là một mặt nạ mà bạn có thể sử dụng để phân đoạn hình ảnh của con mèo

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn có thể tránh các cạnh sắc nét của mặt nạ nhị phân bằng cách làm mờ mặt nạ này. Trước tiên, bạn sẽ phải chuyển đổi nó từ hình ảnh nhị phân thành hình ảnh thang độ xám

>>>

>>> img.show()
7

Bộ lọc

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
26 trả về mặt nạ sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Mặt nạ bây giờ trông giống như một con mèo. Bây giờ bạn đã sẵn sàng để trích xuất hình ảnh con mèo từ nền của nó

>>>

>>> img.show()
8

Đầu tiên, bạn tạo một hình trống có cùng kích thước như

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
27. Bạn tạo một đối tượng
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 mới từ
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
27 bằng cách sử dụng
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
36 và đặt tất cả các giá trị thành 0. Tiếp theo, bạn sử dụng hàm trong
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
45 để tạo một hình ảnh được tạo thành từ cả
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
27 và
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
34 bằng cách sử dụng
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
35 để xác định phần nào của mỗi hình ảnh được sử dụng. Hình ảnh tổng hợp được hiển thị dưới đây

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn đã phân đoạn hình ảnh con mèo và trích xuất con mèo từ nền của nó

Loại bỏ các quảng cáo

Xếp chồng hình ảnh bằng cách sử dụng >>> from PIL import Image >>> filename = "buildings.jpg" >>> with Image.open(filename) as img: .. img.load() ... >>> type(img) >>> isinstance(img, Image.Image) True 36

Bạn có thể tiến thêm một bước và dán hình ảnh con mèo đã được phân đoạn vào hình ảnh sân trong tu viện từ kho hình ảnh cho hướng dẫn này

>>>

>>> img.show()
9

Bạn đã từng dán một hình ảnh lên một hình ảnh khác. Phương pháp này có thể được sử dụng với ba đối số

  • Đối số đầu tiên là hình ảnh mà bạn muốn dán vào. Bạn đang thay đổi kích thước hình ảnh thành một phần năm kích thước của nó bằng cách sử dụng toán tử chia số nguyên (
    >>> converted_img = img.transpose(Image.FLIP_TOP_BOTTOM)
    >>> converted_img.show()
    
    5)
  • Đối số thứ hai là vị trí trong hình ảnh chính mà bạn muốn dán hình ảnh thứ hai. Bộ dữ liệu bao gồm các tọa độ trong hình ảnh chính nơi bạn muốn đặt góc trên cùng bên trái của hình ảnh mà bạn đang dán vào
  • Đối số thứ ba cung cấp mặt nạ mà bạn muốn sử dụng nếu bạn không muốn dán toàn bộ hình ảnh

Bạn đã sử dụng mặt nạ mà bạn thu được từ quá trình tạo ngưỡng, xói mòn và giãn nở để dán con mèo mà không có nền của nó. Đầu ra là hình ảnh sau đây

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn đã phân đoạn con mèo từ một hình ảnh và đặt nó vào một hình ảnh khác để thể hiện con mèo đang ngồi lặng lẽ trong sân của tu viện thay vì trên cánh đồng nơi nó đang ngồi trong hình ảnh ban đầu

Tạo hình mờ

Nhiệm vụ cuối cùng của bạn trong ví dụ này là thêm logo Real Python làm hình mờ vào hình ảnh. Bạn có thể lấy tệp hình ảnh có logo Real Python từ kho lưu trữ kèm theo hướng dẫn này

Nhận hình ảnh. Nhấp vào đây để truy cập vào các hình ảnh mà bạn sẽ thao tác và xử lý với Gối

Bạn nên tiếp tục làm việc trong cùng một phiên REPL

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
0

Đây là logo kích thước đầy đủ có màu

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn có thể thay đổi hình ảnh thành thang độ xám và ngưỡng nó bằng cách sử dụng

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
36 để chuyển đổi nó thành hình ảnh đen trắng. Bạn cũng giảm kích thước của nó và biến nó thành một hình ảnh đường viền

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
1

Đầu ra hiển thị đường viền từ logo Real Python. Đường viền lý tưởng để sử dụng làm hình mờ trên hình ảnh của bạn

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Để sử dụng hình mờ này làm hình chìm mờ, bạn cần đảo ngược màu sao cho nền có màu đen và chỉ đường viền bạn muốn giữ lại có màu trắng. Bạn có thể đạt được điều này bằng cách sử dụng lại

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
36

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
2

Bạn đã chuyển đổi các pixel có giá trị

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
56 và gán cho chúng giá trị
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
38, chuyển đổi chúng từ pixel trắng thành pixel đen. Bạn đặt các pixel còn lại thành màu trắng. Logo đường viền đảo ngược được hiển thị bên dưới

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bước cuối cùng của bạn là dán đường viền này lên hình ảnh con mèo ngồi trong sân tu viện. Bạn có thể sử dụng lại

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
37

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
3

Đối số đầu tiên trong

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
37 cho biết hình ảnh mà bạn muốn dán vào và đối số thứ ba đại diện cho mặt nạ. Trong trường hợp này, bạn đang sử dụng cùng một hình ảnh làm mặt nạ vì hình ảnh là hình ảnh nhị phân. Đối số thứ hai cung cấp tọa độ trên cùng bên trái của vùng mà bạn muốn dán hình ảnh

Hình ảnh hiện bao gồm hình mờ Real Python

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Hình mờ có đường viền hình chữ nhật, là kết quả của bộ lọc đường viền mà bạn đã sử dụng trước đó. Nếu bạn muốn xóa đường viền này, bạn có thể cắt ảnh bằng cách sử dụng

>>> cropped_img.save("cropped_image.jpg")
>>> low_res_img.save("low_resolution_cropped_image.png")
9. Đây là một bài tập mà bạn có thể thử một mình

Loại bỏ các quảng cáo

Thao tác hình ảnh với NumPy và Gối

Gối có nhiều lựa chọn chức năng và bộ lọc tích hợp. Tuy nhiên, có những lúc bạn cần đi xa hơn và thao tác với hình ảnh ngoài các tính năng đã có sẵn trong Gối

Bạn có thể thao tác thêm với hình ảnh với sự trợ giúp của NumPy. NumPy là một thư viện Python rất phổ biến để xử lý các mảng số và là một công cụ lý tưởng để sử dụng với Gối. Bạn có thể tìm hiểu thêm về NumPy trong Hướng dẫn NumPy. Những bước đầu tiên của bạn vào khoa học dữ liệu trong Python

Khi bạn chuyển đổi một hình ảnh thành một mảng NumPy, bạn có thể thực hiện bất kỳ phép biến đổi nào mà bạn yêu cầu trực tiếp trên các pixel trong mảng. Khi bạn đã hoàn thành quá trình xử lý của mình trong NumPy, bạn có thể chuyển đổi mảng trở lại thành đối tượng

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 bằng Gối. Bạn cần cài đặt NumPy cho phần này

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
4

Bây giờ bạn đã cài đặt NumPy, bạn đã sẵn sàng sử dụng Gối và NumPy để phát hiện sự khác biệt giữa hai hình ảnh

Sử dụng NumPy để trừ các hình ảnh với nhau

Xem bạn có thể phát hiện ra sự khác biệt giữa hai hình ảnh sau không

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Đây không phải là một khó. Tuy nhiên, bạn quyết định gian lận và viết một chương trình Python để giải câu đố cho bạn. Bạn có thể tải xuống các tệp hình ảnh

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
47 và
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
48 (tín dụng hình ảnh) từ kho lưu trữ đi kèm với hướng dẫn này

Nhận hình ảnh. Nhấp vào đây để truy cập vào các hình ảnh mà bạn sẽ thao tác và xử lý với Gối

Bước đầu tiên của bạn là đọc hình ảnh bằng Gối và chuyển đổi chúng thành mảng NumPy

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
5

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
49 và
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
50 là các đối tượng thuộc loại
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
51, nên bạn có thể thao tác với chúng bằng tất cả các công cụ có sẵn trong NumPy. Bạn có thể trừ một mảng khỏi mảng kia để hiển thị các pixel khác nhau giữa hai hình ảnh

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
6

Khi bạn trừ một mảng khỏi một mảng khác có cùng kích thước, kết quả là một mảng khác có cùng hình dạng với các mảng ban đầu. Bạn có thể chuyển đổi mảng này thành hình ảnh bằng cách sử dụng

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
52 trong Gối

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
7

Kết quả của việc trừ một mảng NumPy khỏi một mảng khác và chuyển đổi thành Gối

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 là hình ảnh khác biệt được hiển thị bên dưới

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Hình ảnh khác biệt chỉ hiển thị ba vùng từ hình ảnh gốc. Các vùng này làm nổi bật sự khác biệt giữa hai hình ảnh. Bạn cũng có thể thấy một số nhiễu xung quanh đám mây và hàng rào, đó là do những thay đổi nhỏ trong quá trình nén JPEG ban đầu ở khu vực xung quanh các mục này

Sử dụng NumPy để tạo hình ảnh

Bạn có thể đi xa hơn và tạo hình ảnh từ đầu bằng NumPy và Gối. Bạn có thể bắt đầu bằng cách tạo một hình ảnh thang độ xám. Trong ví dụ này, bạn sẽ tạo một hình ảnh đơn giản chứa hình vuông, nhưng bạn có thể tạo các hình ảnh phức tạp hơn theo cách tương tự

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
8

Bạn tạo một mảng có kích thước

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
54 chứa các số 0 ở khắp mọi nơi. Tiếp theo, bạn đặt giá trị của một tập hợp các pixel ở giữa mảng thành
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
56

Bạn có thể sử dụng mảng NumPy bằng cả hàng và cột. Trong ví dụ này, lát đầu tiên,

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
56, đại diện cho các hàng
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
57 đến
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
58. Lát thứ hai,
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
56, theo sau dấu phẩy, đại diện cho các cột
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
57 đến
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
58

Bạn có thể sử dụng

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
52 để chuyển mảng NumPy thành một đối tượng kiểu
>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5. Đầu ra từ đoạn mã trên được hiển thị bên dưới

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn đã tạo một hình ảnh thang độ xám chứa một hình vuông. Chế độ của hình ảnh được suy ra tự động khi bạn sử dụng

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
52. Trong trường hợp này, chế độ
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
65 được sử dụng, tương ứng với hình ảnh có pixel dấu phẩy động 32 bit. Bạn có thể chuyển đổi ảnh này thành ảnh thang độ xám đơn giản hơn với pixel 8 bit nếu muốn

>>>

>>> img.format
'JPEG'

>>> img.size
(1920, 1273)

>>> img.mode
'RGB'
9

Bạn cũng có thể đi xa hơn và tạo một hình ảnh màu. Bạn có thể lặp lại quy trình trên để tạo ba hình ảnh, một hình ảnh tương ứng với kênh màu đỏ, hình ảnh khác tương ứng với kênh màu xanh lục và hình ảnh cuối cùng tương ứng với kênh màu xanh dương

>>>

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
0

Bạn tạo một đối tượng

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 từ mỗi mảng NumPy và chuyển đổi hình ảnh sang chế độ
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
67, đại diện cho thang độ xám. Giờ đây, bạn có thể kết hợp ba hình ảnh riêng biệt này thành một hình ảnh RGB bằng cách sử dụng
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
68

>>>

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
1

Đối số đầu tiên trong

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
68 là chế độ xuất hình ảnh. Đối số thứ hai là một chuỗi với các hình ảnh đơn dải riêng lẻ. Mã này tạo ra hình ảnh sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Bạn đã kết hợp các dải riêng biệt thành một hình ảnh màu RGB. Trong phần tiếp theo, bạn sẽ tiến thêm một bước và tạo hoạt ảnh GIF bằng NumPy và Gối

Tạo hoạt ảnh

Trong phần trước, bạn đã tạo một hình màu chứa ba hình vuông chồng lên nhau có màu khác nhau. Trong phần này, bạn sẽ tạo hoạt ảnh hiển thị ba hình vuông đó hợp nhất thành một hình vuông màu trắng duy nhất. Bạn sẽ tạo một số phiên bản của hình ảnh chứa ba ô vuông và vị trí của các ô vuông sẽ thay đổi đôi chút giữa các hình ảnh liên tiếp

>>>

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
2

Bạn tạo một danh sách trống có tên là

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
70, bạn sẽ sử dụng danh sách này để lưu trữ các hình ảnh khác nhau mà bạn tạo ra. Trong vòng lặp
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
49, bạn tạo các mảng NumPy cho các kênh màu đỏ, lục và lam, như bạn đã làm trong phần trước. Mảng chứa lớp màu xanh lá cây luôn giống nhau và đại diện cho một hình vuông ở giữa hình ảnh

Hình vuông màu đỏ bắt đầu ở vị trí dịch chuyển về phía trên bên trái của trung tâm. Trong mỗi khung liên tiếp, hình vuông màu đỏ di chuyển gần tâm hơn cho đến khi nó chạm tới tâm trong lần lặp cuối cùng của vòng lặp. Hình vuông màu xanh ban đầu được dịch chuyển về phía dưới bên phải, sau đó di chuyển về phía trung tâm với mỗi lần lặp lại

Lưu ý rằng trong ví dụ này, bạn đang lặp lại trên

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
72, có nghĩa là biến số
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
73 tăng theo hai bước

Trước đó, bạn đã biết rằng bạn có thể lưu một đối tượng

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
5 vào tệp bằng cách sử dụng
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
75. Bạn có thể sử dụng chức năng tương tự để lưu vào tệp GIF bao gồm một chuỗi hình ảnh. Bạn gọi
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
75 trên hình ảnh đầu tiên trong chuỗi, đó là hình ảnh đầu tiên mà bạn lưu trữ trong danh sách
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
70

>>>

>>> cropped_img = img.crop((300, 150, 700, 1000))
>>> cropped_img.size
(400, 850)

>>> cropped_img.show()

>>> low_res_img = cropped_img.resize(
..     (cropped_img.width // 4, cropped_img.height // 4)
.. )
>>> low_res_img.show()
3

Đối số đầu tiên trong

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
00 là tên tệp cho tệp mà bạn muốn lưu. Phần mở rộng trong tên tệp cho biết
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
00 định dạng tệp cần xuất ra. Bạn cũng bao gồm hai đối số từ khóa trong
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
00

  • >>> from PIL import Image
    >>> filename = "buildings.jpg"
    >>> with Image.open(filename) as img:
    ..     img.load()
    ...
    
    >>> type(img)
    
    
    >>> isinstance(img, Image.Image)
    True
    
    81 đảm bảo rằng tất cả các hình ảnh trong chuỗi được lưu chứ không chỉ hình ảnh đầu tiên
  • >>> from PIL import Image
    >>> filename = "buildings.jpg"
    >>> with Image.open(filename) as img:
    ..     img.load()
    ...
    
    >>> type(img)
    
    
    >>> isinstance(img, Image.Image)
    True
    
    82 cho phép bạn nối các hình ảnh còn lại trong chuỗi vào tệp GIF

Mã này lưu

>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
83 vào tệp và sau đó bạn có thể mở tệp GIF bằng bất kỳ phần mềm hình ảnh nào. GIF sẽ lặp lại theo mặc định, nhưng trên một số hệ thống, bạn sẽ cần thêm đối số từ khóa
>>> from PIL import Image
>>> filename = "buildings.jpg"
>>> with Image.open(filename) as img:
..     img.load()
...

>>> type(img)


>>> isinstance(img, Image.Image)
True
84 vào
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install Pillow
00 để đảm bảo GIF lặp lại. Hình ảnh động mà bạn nhận được là hình sau

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Ba hình vuông có màu khác nhau hợp nhất thành một hình vuông màu trắng duy nhất. Bạn có thể tạo hoạt hình của riêng mình bằng các hình dạng khác nhau và màu sắc khác nhau không?

Phần kết luận

Bạn đã học cách sử dụng Gối để xử lý ảnh và thực hiện xử lý ảnh. Nếu bạn thích làm việc với hình ảnh, bạn có thể muốn lao đầu vào thế giới xử lý hình ảnh. Còn rất nhiều điều để tìm hiểu về lý thuyết và thực hành xử lý ảnh. Một điểm khởi đầu tốt là Xử lý hình ảnh kỹ thuật số của Gonzalez và Woods, đây là sách giáo khoa kinh điển trong lĩnh vực này

Gối không phải là thư viện duy nhất mà bạn có thể sử dụng trong Python để xử lý ảnh. Nếu mục đích của bạn là thực hiện một số xử lý cơ bản, thì các kỹ thuật mà bạn đã học trong hướng dẫn này có thể là tất cả những gì bạn cần. Nếu bạn muốn tìm hiểu sâu hơn về các kỹ thuật xử lý hình ảnh nâng cao hơn, chẳng hạn như cho các ứng dụng máy học và thị giác máy tính, thì bạn có thể sử dụng Gối làm bước đệm cho các thư viện khác như OpenCV và scikit-image

Trong hướng dẫn này, bạn đã học cách

  • Đọc hình ảnh với Gối
  • Thực hiện các thao tác thao tác hình ảnh cơ bản
  • Sử dụng Gối để xử lý ảnh
  • Sử dụng NumPy với Gối để xử lý thêm
  • Tạo ảnh động bằng Gối

Bây giờ, hãy xem qua các hình ảnh trong thư mục hình ảnh trên máy tính của bạn và chọn một vài hình ảnh mà bạn có thể đọc dưới dạng hình ảnh bằng Gối, quyết định cách bạn muốn xử lý những hình ảnh này, sau đó thực hiện một số xử lý hình ảnh trên chúng. Chúc vui vẻ

Đánh dấu là đã hoàn thành

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Gửi cho tôi thủ thuật Python »

Giới thiệu về Stephen Gruppetta

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?
Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Stephen từng làm việc với tư cách là nhà vật lý nghiên cứu, phát triển các hệ thống hình ảnh để phát hiện bệnh về mắt. Bây giờ anh ấy dạy viết mã bằng Python cho trẻ em và người lớn. Và anh ấy gần như đã hoàn thành cuốn sách mã hóa Python đầu tiên của mình cho người mới bắt đầu

» Thông tin thêm về Stephen


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Aldren

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Geir Arne

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Ian

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

kate

Thuộc tính nào được sử dụng để hiển thị kích thước của hình ảnh trong Python?

Sadie

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonista chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng các chuyên gia Pythonistas

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Làm thế nào để đo kích thước hình ảnh?

Cách xác định kích thước hình ảnh trong nguồn cấp dữ liệu của bạn .
Mở trang có nguồn cấp dữ liệu của bạn trong Chrome
Bấm chuột phải vào hình ảnh có kích thước bạn muốn biết và chọn Kiểm tra
Xem chiều rộng và chiều cao của hình ảnh của bạn được hiển thị trong Chrome DevTools. (Lưu ý, số đầu tiên luôn là chiều rộng)

Làm cách nào để thay đổi kích thước hình ảnh Python?

Thay đổi kích thước hình ảnh bằng Python bằng Gối .
Nhập lớp hình ảnh PIL. từ hình ảnh nhập PIL
Tải hình ảnh từ một tệp bằng hàm open(). hình ảnh = Hình ảnh. .
Gọi phương thức thay đổi kích thước () trên phiên bản hình ảnh mới, truyền đối số bộ dữ liệu có hai số nguyên để chỉ định chiều rộng và chiều cao mà bạn mong muốn. hình ảnh = Hình ảnh

Làm thế nào để thay đổi kích thước hình ảnh hoạt động Python?

Thay đổi kích thước hình ảnh . Chức năng này không sửa đổi hình ảnh được sử dụng; . you call the resize() method on it, passing in a two-integer tuple argument representing the width and height of the resized image. The function doesn't modify the used image; it instead returns another Image with the new dimensions.