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
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 PythonThư 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 4 trong môi trường ảo
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áoMô-đ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ốiLớp chính được định nghĩa trong Gối là lớp 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 5Đối với mã trong phần này, bạn sẽ cần tệp hình ảnh có tên 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àyNhậ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 >>>
Bạn có thể muốn nhập từ Gối thay vì từ PIL. Rốt cuộc, bạn đã cài đặt 0, không phải 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 1 khi nhập vào mã của mìnhBạ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 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ữaTrong 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 5, khi bạn xác nhận bằng lệnh gọi tới 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, 5. Bạn có thể hiển thị hình ảnh bằng cách sử dụng>>>
Phương pháp 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ịTrên một số hệ thống, gọi 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ụngBạ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 5, và>>>
Đị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à 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à 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 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à>>>
Đối số của 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 ảnhHình ảnh mới mà 9 trả về trong mã ở trên có kích thước là 3 pixel. Hình ảnh đã cắt chỉ hiển thị một trong các tòa nhà từ ảnh gốcTrong đ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 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 pixelTrong 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 ( 5) và 5 và. Cuộc gọi cuối cùng đến 9 hiển thị hình ảnh đã cắt và thay đổi kích thướcCó 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 >>>
Đố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 2 thay đổi đối tượng 5 tại chỗ và không trả về đối tượng mới. Tuy nhiên, 9, 0, và 1 đều trả về một đối tượng 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áchKhi 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ố 5 vào tệp bằng cách sử dụng>>>
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áoThao tác hình ảnh cơ bảnBạ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 >>>
Mã này hiển thị hình ảnh sau Có bảy tùy chọn mà bạn có thể chuyển làm đối số cho 01
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 >>>
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 Đối tượng 5 được trả về có cùng kích thước với đối tượng 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 13>>> 0Phương thức này trả về một hình ảnh lớn hơn chứa đầy đủ hình ảnh đã xoay 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 PythonMộ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 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 15 pixel được biểu thị bằng một mảng giá trị 16Hì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 15 pixel được biểu thị bằng một mảng giá trị 18Chế độ 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 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 22 (nguồn hình ảnh) từ kho hình ảnh cho hướng dẫn nàyChế độ 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 >>> 1Bạn gọi 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 sauKết quả đầu ra từ các cuộc gọi đến 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ámBạ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 5 bằng cách sử dụng. Khi bạn sử dụng 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 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ề>>> 2Chế độ của đối tượng mà 25 trả về là 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 pixelBâ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 27, đây là một chức năng trong mô-đun 5>>> 3Đối số đầu tiên trong 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ấtRiêng dải màu đỏ, được lưu trữ trong biến 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 36Phươ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 37 để ánh xạ từng điểm tới 38Khi 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à 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àuBạn cũng lặp lại quy trình tương tự để có được 40 và 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 sauHì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 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ấtCó thể bạn quan tâm 4Tham số đầu tiên trong 42 sử dụng toán tử ( 44) để có thể sử dụng bất kỳ số lượng đối tượng nào thuộc loại 45 làm đối số đầu vào. Tham số từ khóa 46 có thể được đặt thành 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ướcKí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 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 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 5 cuối cùng chứa tất cả các hình ảnh cạnh nhauHì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 42 như sau>>> 5Chứ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áoXử lý ảnh bằng Gối trong PythonBạ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 KernelsMộ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ì? 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 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 54 pixel. Hình ảnh dưới đây được phóng to cho mục đích hiển thị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 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
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
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à 59, là vị trí của ô trung tâm của nó vì nó nằm ở hàng thứ tư (chỉ mục = 60) và cột thứ ba (chỉ mục = 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ôngDo đó, 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 59Kị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 ở 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í 63 trong ảnh mới sẽ là 66Vị trí nhân thứ ba được minh họa ở trên là tại 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à 56, vì vậy kết quả phép nhân sẽ lại là 66 cho mỗi vị trí pixel đó. Kết quả tổng thể cho vị trí hạt nhân này là 70. Hình ảnh mới sẽ có giá trị này tại 67Sơ đồ 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 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 58 ở đó sao cho tổng trọng số của hạt nhân là 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 52 trong GốiLoại bỏ các quảng cáoLàm mờ, làm sắc nét và làm mịn hình ảnhBạ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 >>> 6Ngoài 5, bạn cũng nhập mô-đun 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 ảnhBạn có thể làm mờ hình ảnh bằng cách sử dụng bộ lọc 79 được xác định trước>>> 7Hì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 9 và sau đó hiển thị lại hình ảnh bằng cách sử dụng 9>>> 8Hai hình ảnh được crop cho thấy sự khác biệt giữa hai phiên bản 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 >>> 9Bạ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 Bộ lọc 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 57. Điều này có nghĩa là nó có bán kính là 73, bởi vì bộ lọc mở rộng thêm một pixel từ tâmHình ảnh bị mờ cho thấy bộ lọc làm mờ hộp có bán kính 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 88Bạn cũng có thể sử dụng bộ lọc 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ợpNếu bạn muốn làm sắc nét một hình ảnh thì sao? >>> 0Bạ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 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 91 làm đối số cho 77>>> 1Dướ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 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 52. Các bộ lọc này hoạt động trên các cạnh của đối tượng trong ảnhLoại bỏ các quảng cáoPhát hiện cạnh, Tăng cường cạnh và Dập nổiKhi 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 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>>> 2Kết quả là một hình ảnh hiển thị các cạnh từ hình ảnh gốc 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 91 trước khi tìm các cạnh>>> 3Bạ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 Bạn cũng có thể cải thiện các cạnh của ảnh gốc bằng bộ lọc 96>>> 4Bạ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 Một bộ lọc được xác định trước khác trong 52 xử lý các cạnh của đối tượng là 98. Bạn có thể chuyển nó dưới dạng đối số cho 77 như bạn đã làm với các bộ lọc khác trong phần này>>> 5Bạ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 Trong phần này, bạn đã tìm hiểu về một số bộ lọc có sẵn trong mô-đun 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 trongPhâ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 02 (tín dụng hình ảnh) và 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àyNhậ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 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áoNgưỡng hình ảnhBạn sẽ bắt đầu bằng cách làm việc trên 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ưỡngTrướ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 >>> 6Hì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ó 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 >>> 7Bạn đạt được ngưỡng bằng cách gọi 36 để chuyển đổi từng pixel trong ảnh thang độ xám thành 56 hoặc 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à 08Hình bên dưới hiển thị ảnh thang độ xám và kết quả từ quá trình tạo ngưỡng 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 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ưỡngNgưỡ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 đó >>> 8Cá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 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 >>> 9Bạn sử dụng giá trị ngưỡng là 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 11 làm đối số cho 21. Các pixel trong ảnh nhị phân chỉ có thể có các giá trị là 38 hoặc 73Ghi 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 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áoXói mòn và giãn nởBạn có thể xem tệp hình ảnh có tên là 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àyPhí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 16 làm đối số cho phương thức 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 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 0Bạn có thể thấy hiệu ứng xói mòn bằng cách áp dụng 16 nhiều lần vào hình ảnh 15. Bạn nên tiếp tục với phiên REPL giống như trong phần trước>>> 0Bạn đã áp dụng bộ lọc ba lần bằng cách sử dụng vòng lặp 49. Mã này cho đầu ra sauDấ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 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ắngBạ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 >>> 1Dấu chấm bây giờ đã lớn hơn và lỗ đã thu hẹp lại 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 >>> 2Bạn thực hiện mười chu kỳ xói mòn với vòng lặp 49 đầu tiên. Hình ảnh ở giai đoạn này như sauDấ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 49 thứ hai thực hiện mười chu kỳ giãn nở, đưa lỗ trở về kích thước ban đầuTuy 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ở >>> 3Cá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áoPhân đoạn hình ảnh bằng cách sử dụng ngưỡngBạ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 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>>> 4Hì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 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 >>> 5Nă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 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 >>> 6Kế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 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 >>> 7Bộ lọc 26 trả về mặt nạ sauMặ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ó >>> 8Đầu tiên, bạn tạo một hình trống có cùng kích thước như 27. Bạn tạo một đối tượng 5 mới từ 27 bằng cách sử dụng 36 và đặt tất cả các giá trị thành 0. Tiếp theo, bạn sử dụng hàm trong 45 để tạo một hình ảnh được tạo thành từ cả 27 và 34 bằng cách sử dụng 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 đâyBạ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áoXế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)
|