- Hình ảnh là gì?
- Cách máy tính lưu trữ hình ảnh
- Tại sao máy khó nhận dạng hình ảnh
- Ứng dụng và cách sử dụng OpenCV
- Cài đặt OpenCV với Python và Anaconda
- Mở và lưu hình ảnh trong OpenCV
- Hình ảnh tỷ lệ màu xám trong OpenCV
- Không gian màu
- Khám phá các thành phần riêng lẻ của hình ảnh RGB
- Chuyển đổi hình ảnh thành thành phần RGB riêng lẻ
- Biểu diễn biểu đồ của hình ảnh
- Vẽ Hình ảnh và Hình dạng bằng OpenCV
Nghệ thuật là một cách nhìn, và họ nói nhìn là tin, nhưng điều ngược lại cũng đúng, tin là thấy và thật khó tưởng tượng sống trên thế giới này mà không có năng khiếu về thị giác - đôi mắt của chúng ta, thật tuyệt vời khi là một đứa trẻ sơ sinh. Khi mắt chúng ta vừa mở ra, chúng ta nhìn thấy thế giới và bắt đầu nhận biết và nhìn thấy thế giới xung quanh mình nhưng khi thời gian trôi qua, trải nghiệm tuyệt vời đó trở thành một trải nghiệm trần tục. Nhưng khi chúng ta đang tiến bộ với công nghệ, chúng ta đang ở đỉnh cao mà máy móc cũng có thể nhìn thấy và hiểu được nó. Hiện tại, có vẻ như không phải là khoa học viễn tưởng nếu bạn chỉ mở khóa điện thoại bằng khuôn mặt, nhưng câu chuyện về sự phát triển của thị giác máy đã có từ hơn 20 năm trước.
Bước chính thức ban đầu trong lĩnh vực này được thực hiện trở lại vào năm 1999 trong một sáng kiến của Intel, khi tất cả các nghiên cứu đang diễn ra đều được hợp tác trong OPEN CV (tầm nhìn máy tính nguồn mở), ban đầu được viết bằng C ++, với bản phát hành chính đầu tiên 1.0 vào năm 2006. vào năm 2009, thứ ba vào năm 2015 và thứ tư ngay bây giờ vào năm 2018. Hiện OpenCV có giao diện C ++, Python và Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android. Vì vậy, nó có thể dễ dàng cài đặt trong Raspberry Pi với môi trường Python và Linux. Và Raspberry Pi với OpenCV và camera kèm theo có thể được sử dụng để tạo nhiều ứng dụng xử lý hình ảnh thời gian thực như Nhận diện khuôn mặt, khóa khuôn mặt, theo dõi đối tượng, phát hiện biển số ô tô, Hệ thống an ninh gia đình, v.v.
Trước khi tìm hiểu xử lý hình ảnh bằng openCV, điều quan trọng là phải biết hình ảnh là gì và cách con người và máy móc cảm nhận những hình ảnh đó.
Hình ảnh là gì?
Hình ảnh là một biểu diễn hai chiều của quang phổ ánh sáng nhìn thấy. Và quang phổ ánh sáng khả kiến chỉ là một phần của quang phổ điện từ nằm giữa quang phổ hồng ngoại và tia cực tím.
Hình ảnh được hình thành như thế nào: - khi ánh sáng phản xạ từ một vật thể lên phim, cảm biến hoặc trên võng mạc.
Đây là cách mắt của chúng ta hoạt động, sử dụng một vật chắn để chặn phần lớn điểm của ánh sáng để lại một khe hở nhỏ mà ánh sáng có thể đi qua được gọi là khẩu độ, và nó tạo thành một hình ảnh tập trung nhiều và là một mô hình hoạt động cho một máy ảnh lỗ pin nhưng có một vấn đề trong máy ảnh lỗ pin, đó là cùng một lượng ánh sáng sẽ đi vào khẩu độ, không thể phù hợp với phim hoặc hình ảnh được tạo thành, chúng tôi cũng không thể có được hình ảnh lấy nét, để lấy nét hình ảnh của chúng tôi. cần phải di chuyển phim qua lại, nhưng điều này là vấn đề trong nhiều tình huống.
Hoặc chúng ta có thể khắc phục sự cố này bằng cách sử dụng ống kính, nó cho phép chúng ta kiểm soát kích thước khẩu độ và trong nhiếp ảnh, nó được gọi là f Stop, nói chung càng thấp giá trị của f Stop sẽ tốt hơn trong nhiếp ảnh.
Kích thước khẩu độ cũng cho phép chúng ta có được độ sâu trường ảnh đẹp được gọi là Bokeh trong nhiếp ảnh, nó cho phép chúng ta có nền mờ trong khi lấy nét vào hình ảnh.
Cách máy tính lưu trữ hình ảnh
Bạn có thể đã nghe nói về các định dạng hình ảnh khác nhau như.png,.jpgG, v.v. tất cả đều là đại diện kỹ thuật số cho thế giới tương tự của chúng ta, máy tính thực hiện bằng cách dịch hình ảnh thành mã kỹ thuật số để lưu trữ và sau đó giải thích tệp trở lại thành hình ảnh trưng bày. Nhưng về cơ bản, chúng sử dụng một nền tảng chung để lưu trữ hình ảnh và điều này cũng đúng với openCV.
OpenCV sử dụng không gian màu RGB (đỏ, lục và lam) theo mặc định cho hình ảnh của nó, trong đó mỗi tọa độ pixel (x, y) chứa 3 giá trị khác nhau cho các cường độ ở dạng 8-bit, tức là (0-255, 2 8).
Trộn các cường độ khác nhau của mỗi màu sẽ cho chúng ta toàn bộ quang phổ, đó là lý do tại sao trong hội họa hoặc nghệ thuật, ba màu này được coi là màu chính và tất cả các màu khác là màu phụ, bởi vì hầu hết các màu thứ cấp có thể được tạo thành bởi các màu cơ bản. Giống như màu vàng, chúng ta có các giá trị sau: Red - 255; Xanh lá cây - 255; Xanh lam - 0.
Bây giờ các hình ảnh được lưu trữ trong các mảng đa chiều. Trong lập trình, mảng là một chuỗi tập hợp các đối tượng. Và ở đây chúng ta xử lý ba loại mảng 1D, 2D và 3D trong đó 'D' là chiều.
Hình ảnh màu được lưu trữ trong mảng ba chiều, trong đó kích thước thứ ba đại diện cho màu RGB (mà chúng ta sẽ thấy sau), và chúng kết hợp với nhau tạo thành các cường độ pixel khác nhau cho một hình ảnh, trong khi hình ảnh đen trắng được lưu trữ trong mảng hai chiều và cũng có hai loại hình ảnh đen trắng Thang độ xám và hình ảnh nhị phân.
Hình ảnh thang độ xám được hình thành từ các sắc thái xám của một mảng hai chiều, trong khi hình ảnh nhị phân là pixel có màu đen hoặc trắng.
Tại sao máy khó nhận dạng hình ảnh
Thị giác máy tính tự bản thân nó là một nhiệm vụ đầy thách thức, bạn có thể tự mình tưởng tượng việc cung cấp cho máy tính cảm giác về tầm nhìn, khả năng nhận biết và nhận dạng là khó khăn như thế nào. Có những yếu tố sau đây làm cho thị giác máy tính trở nên khó khăn.
- Giới hạn của cảm biến máy ảnh và ống kính
- Xem các biến thể điểm
- Thay đổi ánh sáng
- Mở rộng quy mô
- Sự xuất hiện
- Các biến thể của lớp đối tượng
- Hình ảnh mơ hồ / Ảo ảnh quang học
Ứng dụng và cách sử dụng OpenCV
Bất chấp khó khăn, Computer Vision có nhiều câu chuyện thành công
- Điều hướng bằng rô bốt - Ô tô tự lái
- Nhận diện & Nhận diện khuôn mặt
- Tìm kiếm Hình ảnh Công cụ Tìm kiếm
- Đọc biển số xe
- Nhận dang chu Viet
- Snapchat & Bộ lọc khuôn mặt
- Nhận dạng đối tượng
- Theo dõi bóng & cầu thủ trong thể thao
- Và nhiều thứ khác nữa!
Cài đặt OpenCV với Python và Anaconda
OpenCV được viết bằng C ++, nhưng rất khó để triển khai nó với C ++ và do đó chúng tôi chọn triển khai nó với ngôn ngữ cấp cao là python và cũng có những lợi ích bổ sung khi triển khai OpenCV với python vì Python là một trong những ngôn ngữ dễ dàng nhất. dành cho người mới bắt đầu Nó cực kỳ mạnh mẽ cho các ứng dụng khoa học dữ liệu và máy học và nó cũng lưu trữ hình ảnh trong các mảng numpy cho phép chúng tôi thực hiện một số hoạt động rất mạnh một cách khá dễ dàng.
Lập trình cơ bản hữu ích với Tiếp xúc với Toán cấp Trung học, một webcam, Python 2.7 hoặc 3.6 (Ưu tiên Gói Anaconda).
Bước 1. Tải xuống và cài đặt gói Anaconda Python
Truy cập: https://www.anaconda.com/download và chọn tùy theo thời tiết máy của bạn với windows, Linux hoặc mac và bạn có thể chọn phiên bản python 2.7 hoặc python 3.7 cho hệ thống 64 Bit hoặc 32 Bit, nhưng bây giờ một ngày hầu hết hệ thống là 64 bit.
Phân phối Anaconda của python đi kèm với Spyder studio, sổ ghi chép jupyter và dấu nhắc anaconda, giúp python siêu thân thiện khi sử dụng. Chúng tôi sẽ sử dụng spyder studio để làm các ví dụ.
Sự lựa chọn giữa python 2.7 hoặc 3.7 là hoàn toàn trung lập, nhưng đối với các ví dụ, chúng tôi sẽ sử dụng python 3.7 vì nó là tương lai của python và sẽ tiếp quản python 2.7 dạng 2020, hầu hết các thư viện đang được phát triển trong python 3.7 giữ khía cạnh tương lai của python trong tâm trí. Ngoài ra, nó cũng cung cấp kết quả mong đợi về các phép toán cơ bản như (2/5 = 2,5), trong khi python 2.7 sẽ đánh giá nó là 2. Ngoài ra print được coi như một hàm trong python 3.7 (print (“hello”)), vì vậy nó giúp các lập trình viên thực hành.
Bước 2. Tạo nền tảng ảo với OpenCV
Chúng tôi sẽ cài đặt OpenCV bằng cách tạo một nền tảng ảo cho spyder bằng cách sử dụng lời nhắc Anaconda và tệp YML được tải lên tại đây.
Với các tệp YML, chúng tôi sẽ cài đặt tất cả các gói và thư viện cần thiết, nhưng nếu bạn muốn cài đặt bất kỳ gói bổ sung nào, bạn có thể dễ dàng cài đặt thông qua dấu nhắc anaconda, bằng cách chạy lệnh của gói đó.
Đi tới biểu tượng tìm kiếm cửa sổ của bạn và tìm thiết bị đầu cuối nhắc nhở anaconda, bạn có thể tìm thấy nó bên trong thư mục anaconda mà bạn vừa cài đặt.
Sau đó, bạn phải tìm tệp YML đã tải xuống của mình và từ đây bạn có hai lựa chọn hoặc thay đổi thư mục của thiết bị đầu cuối thành vị trí nơi tệp YML của bạn được tải xuống hoặc sao chép tệp YML của bạn vào thư mục mà anaconda của bạn được cài đặt nhiều nhất. trường hợp nó sẽ nằm trong ổ C: \, sau khi sao chép tệp YML của bạn vào vị trí được chỉ định RUN lệnh sau trên lời nhắc của bạn
conda env create –f virtual_platform_windows.yml
Vì hệ thống của tôi đang chạy trên windows nên tệp YML và lệnh tương ứng với các windows, tuy nhiên bạn có thể sửa đổi theo hệ thống của mình bằng cách thay thế windows bằng linux hoặc mac tương ứng.
Lưu ý: - Nếu quá trình trích xuất gói bị lỗi, hãy cài đặt pytorch và numpy trước rồi chạy lệnh trên.
Bây giờ hãy tìm trình điều hướng anaconda và sẽ có một menu thả xuống “Ứng dụng trên ___” và từ đó chọn môi trường ảo và sau đó từ đó bạn phải khởi chạy Spyder studio.
Và thế là xong, bạn đã sẵn sàng để bắt đầu!
Mở và lưu hình ảnh trong OpenCV
Ở đây chúng tôi đang giải thích một số lệnh và thuật ngữ cơ bản để sử dụng Python trong OpenCV. Chúng ta sẽ tìm hiểu về ba hàm cơ bản trong OpenCV imread, imshow và imwrite.
#comments trong python được cung cấp bởi ký hiệu #
Nhập opencv trong python bằng lệnh
nhập cv2
Tải hình ảnh bằng cách sử dụng 'imread' chỉ định đường dẫn đến hình ảnh
image = cv2.imread ('input.jpg')
Bây giờ hình ảnh đó được tải và lưu trữ trong python dưới dạng một biến mà chúng tôi đặt tên là hình ảnh
Bây giờ để hiển thị biến hình ảnh của chúng ta, chúng ta sử dụng 'imshow' và tham số đầu tiên cho hàm imshow là tiêu đề được hiển thị trên cửa sổ hình ảnh và nó phải được nhập vào ('') để biểu thị tên dưới dạng chuỗi
cv2.imshow ('hello world', hình ảnh)
phím chờ cho phép chúng tôi nhập thông tin khi cửa sổ hình ảnh đang mở, bằng cách để trống nó chỉ đợi phím bất kỳ được nhấn trước khi tiếp tục, bằng cách đặt các số (ngoại trừ 0), chúng tôi có thể chỉ định thời gian trễ trong khoảng thời gian bạn giữ cửa sổ mở (thời gian tính bằng mili giây ở đây).
cv2.waitKey ()
'killAllWindows' đóng tất cả các cửa sổ đang mở, không đặt được điều này sẽ khiến chương trình của bạn bị treo.
cv2.destroyAllWindows ()
, đối với điều này, chúng tôi sẽ sử dụng numpy, numpy là một thư viện dành cho lập trình python để hỗ trợ thêm cho các ma trận và mảng đa chiều lớn.
import cv2 #importing numporting numpy import numpy as np image = cv2.imread ('input.jpg') cv2.imshow ('hello_world', image) Hàm #shape rất hữu ích khi chúng ta đang xem kích thước của một mảng, nó trả về một tuple cung cấp một kích thước của bản in hình ảnh (image.shape) cv2.waitKey () cv2.destroyAllWindows ()
đầu ra bảng điều khiển - (183, 275, 3), Hai kích thước của hình ảnh là 183 pixel chiều cao và 275 pixel chiều rộng và 3 có nghĩa là có ba thành phần khác (R, G, B) tạo nên hình ảnh này (nó cho thấy rằng các hình ảnh màu được lưu trữ trong các mảng ba chiều).
print ('Chiều cao của hình ảnh:', (image.shape, 'pixel')) print ('Chiều rộng của hình ảnh:', (image.shape, 'pixel'))
đầu ra bảng điều khiển - Chiều cao của hình ảnh: (183, 'pixel')
Chiều rộng của hình ảnh: (275, 'pixel')
Lưu hình ảnh đã chỉnh sửa trong OpenCV
Chúng tôi sử dụng 'imwrite' để chỉ định tên tệp và hình ảnh sẽ được lưu.
cv2.imwrite ('output.jpg', image) cv2.imwrite ('output.png', image)
Đối số đầu tiên là tên của tệp chúng ta muốn lưu, {để đọc hoặc để lưu tệp, chúng tôi sử dụng ('') để chỉ ra nó dưới dạng chuỗi} và đối số thứ hai là tên tệp.
OpenCV cho phép bạn lưu hình ảnh ở các định dạng khác nhau.
Hình ảnh tỷ lệ màu xám trong OpenCV
Greyscaling là quá trình hình ảnh được chuyển đổi từ một màu đầy đủ sang các sắc thái xám (đen và trắng)
Trong opencv, nhiều chức năng quét ảnh trước khi xử lý. Điều này được thực hiện bởi vì nó đơn giản hóa hình ảnh, hoạt động gần như giảm nhiễu và tăng thời gian xử lý vì có ít thông tin hơn trong hình ảnh (vì hình ảnh thang độ xám được lưu trữ trong các mảng hai chiều).
nhập cv2 # tải hình ảnh đầu vào của chúng tôi image = cv2.imread ('input.jpg') cv2.imshow ('original', image) cv2.waitKey () # chúng tôi sử dụng cvtcolor, để chuyển đổi sang thang độ xám greyscale_image = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) cv2.imshow ('grayscale', gray_image) cv2.waitKey () cv2.destroyALLWindows ()
Cách đơn giản hơn để chuyển đổi hình ảnh thành thang độ xám chỉ là thêm đối số 0 trong hàm imread sang tên hình ảnh
import cv2 grey_image = cv2.imread ('input.jpg', 0) cv2.imshow ('grayscale', grey_image) cv2.waitKey () cv2.destroyAllWindows ()
import cv2 import numpy as np image = cv2.imread ('input.jpg') print (image.shape) cv2.imshow ('original', image) cv2.waitKey () gray_image = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) cv2.imshow ('thang độ xám', hình ảnh màu xám) in ( hình ảnh màu xám) cv2.waitKey () cv2.destroyALLWindows ()
Đầu ra bảng điều khiển: - (183, 275, 3) - cho hình ảnh màu
(183, 275) - cho hình ảnh thang độ xám
Do đó, nó cho thấy rõ ràng rằng các hình ảnh màu được thể hiện bằng các mảng ba chiều, trong khi các hình ảnh tỷ lệ xám được biểu thị bằng các mảng hai chiều.
Không gian màu
Không gian màu là cách hình ảnh được lưu trữ. RGB, HSV, CMYK là các không gian màu khác nhau, đây chỉ là những cách đơn giản để biểu diễn màu.
RGB - Đỏ, Xanh lục và Xanh lam.
HSV - Hue, Saturation và Value.
Và CMYK được sử dụng phổ biến trong máy in phun.
Không gian màu RGB hoặc BGR
Không gian màu mặc định của OpenCV là RGB. RGB là một mô hình màu phụ gia tạo ra màu sắc bằng cách kết hợp các màu xanh lam, xanh lục và đỏ với các cường độ / độ sáng khác nhau. Trong OpenCV, chúng tôi sử dụng độ sâu màu 8 bit.
- Đỏ (0-255)
- Xanh lam (0-255)
- Xanh lục (0-255)
Tuy nhiên OpenCV thực sự lưu trữ màu ở định dạng BGR.
Sự thật thú vị: - Chúng tôi sử dụng thứ tự BGR trong máy tính do cách các số nguyên 32-bit không dấu được lưu trữ trong bộ nhớ, cuối cùng nó vẫn được lưu trữ dưới dạng RGB. Số nguyên đại diện cho một màu, ví dụ: - 0X00BBGGRR sẽ được lưu trữ dưới dạng 0XRRGGBB.
Không gian màu HSVHSV (Hue, Saturation & value / Brightness) là không gian màu cố gắng thể hiện màu sắc mà con người cảm nhận được. Nó lưu trữ thông tin màu sắc trong một biểu diễn hình trụ của các điểm màu RGB.
Hue - giá trị màu (0-179)
Độ bão hòa - Sự cộng hưởng của màu sắc (0-255)
Giá trị - Độ sáng hoặc cường độ (0-255)
Định dạng không gian màu HSV rất hữu ích trong việc phân đoạn màu. Trong RGB, việc lọc màu cụ thể không dễ dàng, tuy nhiên HSV giúp thiết lập các dải màu để lọc màu cụ thể dễ dàng hơn nhiều khi chúng ta cảm nhận chúng.
Hue đại diện cho màu trong HSV, giá trị màu nằm trong khoảng từ 0 - 180 chứ không phải 360, vì vậy nó không hoàn thành vòng tròn đầy đủ và do đó nó được ánh xạ khác với tiêu chuẩn.
Bộ lọc dải màu
- Đỏ - (165-15)
- Xanh lá cây - (45-75)
- Xanh lam - (90-120)
Như chúng ta biết hình ảnh được lưu trữ trong không gian màu RGB (Đỏ, Xanh lục và Xanh lam) và vì vậy OpenCV cho chúng ta thấy như vậy, nhưng điều đầu tiên cần nhớ về định dạng RGB của opencv là nó thực sự là BGR và chúng ta có thể biết nó bằng cách nhìn vào hình dạng hình ảnh.
import cv2 import numpy dưới dạng np image = cv2.imread ('input.jpg') # B, G, R giá trị cho 0,0 pixel đầu tiên B, G, R = image print (B, G, R) print (image.shape) #now nếu chúng tôi áp dụng điều này trên hình ảnh thang độ xám gray_img = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) print (gray_img.shape) #gray_image pixel giá trị cho bản in 10,50 pixel (gray_img)
Đầu ra bảng điều khiển: in (B, G, R) - 6 11 10
print (image.shape) - (183, 275, 3)
print (gray_img.shape) - (183, 275)
print (gray_img) - 69
Bây giờ chỉ có hai chiều trong hình ảnh thang màu xám, vì chúng ta nhớ hình ảnh màu được lưu trữ trong ba chiều, chiều thứ ba là (R, G, B) trong khi ở thang độ xám chỉ có hai chiều, vì (R, G, B) không có và đối với một vị trí pixel cụ thể, chúng tôi chỉ nhận được một giá trị duy nhất trong khi ở hình ảnh màu, chúng tôi có ba giá trị.
Một không gian màu hữu ích khác là HSV
import cv2 image = cv2.imread ('input.jpg') hsv_image = cv2.cvtColor (image, cv2.COLOR_BGR2HSV) cv2.imshow ('HSV image', hsv_image) cv2.imshow ('Hue channel', hsv_image) cv2. imshow ('kênh bão hòa', hsv_image) cv2.imshow ('kênh giá trị', hsv_image) cv2.waitKey () cv2.destroyAllWindows ()
Sau khi chạy mã, bạn có thể thấy bốn hình ảnh, trong đó ba hình ảnh của các kênh riêng lẻ và một hình ảnh là hình ảnh HSV kết hợp.
Hình ảnh kênh Hue khá tối vì giá trị của nó chỉ thay đổi từ 0 đến 180.
Ngoài ra, lưu ý rằng chức năng imshow cố gắng hiển thị cho bạn hình ảnh RGB hoặc BGR, nhưng chuyển đổi HSV chồng chéo nó.
Ngoài ra, kênh giá trị sẽ tương tự như thang độ xám của hình ảnh do độ sáng của nó.
Khám phá các thành phần riêng lẻ của hình ảnh RGB
import cv2 image = cv2.imread ('input.jpg') # opencv's split function chia imageinti từng chỉ mục màu B, G, R = cv2.split (image) cv2.imshow ("Red", R) cv2.imshow ("Green", G) cv2.imshow ("Blue", B) # tạo hình ảnh gốc bằng cách hợp nhất các thành phần màu riêng lẻ đã hợp nhất = cv2.merge () cv2.imshow ("đã hợp nhất", đã hợp nhất) # lấy mẫu màu xanh lam đã hợp nhất = cv2.merge () cv2.imshow ("đã hợp nhất với khuếch đại màu xanh", đã hợp nhất) # thể hiện hình dạng của các thành phần màu riêng lẻ. # đầu ra sẽ chỉ có hai kích thước tùy theo chiều cao và chiều rộng, vì phần tử thứ ba của thành phần RGB là bản in in (B.shape) được biểu diễn riêng lẻ (R.hình dạng) in (G.shape) cv2.waitKey (0) cv2.destroyAllWindows ()
Đầu ra bảng điều khiển: # thứ nguyên của hình ảnh từ hàm hình dạng
(183, 275)
(183, 275)
(183, 275)
Chuyển đổi hình ảnh thành thành phần RGB riêng lẻ
Trong đoạn mã dưới đây, chúng tôi đã tạo một ma trận các số không có kích thước của hình ảnh HxW, số không trả về một mảng chứa đầy các số không nhưng có cùng kích thước.
Hàm Shape rất hữu ích khi chúng ta đang xem xét kích thước của một hình ảnh và ở đây chúng ta đã thực hiện cắt hàm shape đó. Vì vậy, hình dạng sẽ lấy mọi thứ lên đến các điểm được chỉ định tức là đến điểm được chỉ định thứ hai sẽ là chiều cao và chiều rộng của hình ảnh như thứ ba đại diện cho thành phần RGB của hình ảnh và chúng ta không cần nó ở đây.
import cv2 import numpy dưới dạng np image = cv2.imread ('input.jpg') B, G, R = cv2.split (image) zeros = np.zeros (image.shape, dtype = "uint8") cv2.imshow ("RED", cv2.merge ()) cv2.imshow ("Green", cv2.merge ()) cv2.imshow ("Blue", cv2.merge ()) cv2.waitKey (0) cv2.destroyAllWindows ()
Biểu diễn biểu đồ của hình ảnh
Biểu diễn biểu đồ của ảnh là phương pháp trực quan hóa các thành phần của ảnh.
Đoạn mã sau cho phép bạn phân tích hình ảnh thông qua biểu đồ màu của các thành phần màu kết hợp và riêng lẻ của nó.
import cv2 import numpy dưới dạng np # chúng tôi cần nhập matplotlib để tạo các ô biểu đồ nhập matplotlib.pyplot dưới dạng plt image = cv2.imread ('input.jpg') histogram = cv2.calcHist (,, Không có,) # chúng tôi vẽ một histogram, ravel () làm phẳng mảng hình ảnh của chúng tôi plt.hist (image.ravel (), 256,) plt.show () #viewing kênh màu riêng biệt color = ('b', 'g', 'r') # chúng tôi biết tách màu và vẽ từng màu trong biểu đồ cho i, col trong liệt kê (màu): histogram2 = cv2.calcHist (,, Không có,) plt.plot (histogram2, color = col) plt.xlim () plt.show ()
Hãy hiểu hàm calcHist với từng tham số riêng lẻ của nó
cv2.calcHist (hình ảnh, kênh, mặt nạ, kích thước ẩn , phạm vi)
Hình ảnh: nó là hình ảnh nguồn của kiểu uint 8 hoặc float 32. Nó phải được đặt trong dấu ngoặc vuông, tức là “”, cũng chỉ ra mảng cấp hai của nó vì hình ảnh cho opencv là dữ liệu ở dạng mảng.
Kênh: nó cũng được đặt trong dấu ngoặc vuông. Nó là chỉ số của kênh mà chúng tôi tính toán biểu đồ, ví dụ: nếu đầu vào là hình ảnh thang độ xám thì giá trị của nó là, đối với hình ảnh màu bạn có thể vượt qua hoặc để tính toán biểu đồ của kênh màu xanh lam, xanh lục và đỏ tương ứng.
Mask: hình mặt nạ. để tìm biểu đồ của hình ảnh đầy đủ, nó được cho là "không có". nhưng nếu bạn muốn tìm biểu đồ của vùng cụ thể của hình ảnh, bạn phải tạo một hình ảnh mặt nạ cho vùng đó và đặt nó làm mặt nạ.
Histsize: Điều này thể hiện số BIN của chúng tôi. Cần phải cho trong dấu ngoặc vuông để có quy mô đầy đủ, chúng tôi vượt qua.
Phạm vi: Đây là phạm vi của chúng tôi, bình thường là
Vẽ Hình ảnh và Hình dạng bằng OpenCV
Dưới đây là một số ví dụ để vẽ đường thẳng, hình chữ nhật, đa giác, hình tròn, v.v. trong OpenCV.
import cv2 import numpy dưới dạng np #creating a black square image = np.zeros ((512,512,3), np.uint8) # chúng tôi cũng có thể tạo ảnh này ở dạng đen trắng, tuy nhiên sẽ không có bất kỳ thay đổi nào image_bw = np.zeros ((512,512), np.uint8) cv2.imshow ("hình chữ nhật màu đen (màu)", hình ảnh) cv2.imshow ("hình chữ nhật màu đen (B&W)", image_bw)
Hàng
# tạo đường thẳng trên hình vuông màu đen # cv2.line (hình ảnh, tọa độ bắt đầu, tọa độ kết thúc, màu sắc, độ dày) # tạo đường chéo có độ dày 5 pixel image = np.zeros ((512,512,3), np.uint8) cv2.line (image, (0,0), (511,511), (255,127,0), 5) cv2.imshow ("blue line", image)
Hình chữ nhật
# tạo hình chữ nhật trên hình vuông màu đen # cv2.rectangle (hình ảnh, tọa độ bắt đầu, tọa độ kết thúc, màu sắc, độ dày) # tạo hình chữ nhật có độ dày 5 pixel image = np.zeros ((512,512,3), np.uint8) cv2.rectangle (hình ảnh, (30,50), (100,150), (255,127,0), 5) cv2.imshow ("hình chữ nhật", hình ảnh)
# tạo hình tròn trên hình vuông màu đen # cv2.circle (hình ảnh, tâm, bán kính, màu, tô) image = np.zeros ((512,512,3), np.uint8) cv2.circle (image, (100,100), (50), (255,127,0), - 1) cv2.imshow ("vòng tròn", hình ảnh)
# tạo hình ảnh đa giác = np.zeros ((512,512,3), np.uint8) #lets xác định bốn điểm pts = np.array (,,], np.int32) #lets hiện định hình lại các điểm của chúng tôi ở dạng yêu cầu polylines pts = pts.reshape ((- 1,1,2)) cv2.polylines (image, True, (0,255,255), 3) cv2.imshow ("polygon", image)
# nhập văn bản bằng opencv # cv2.putText (hình ảnh, 'văn bản để hiển thị', điểm bắt đầu bên trái bootom, phông chữ, cỡ chữ, màu sắc, độ dày) image = np.zeros ((512,512,3), np.uint8) cv2. putText (hình ảnh, "chào thế giới", (75,290), cv2.FONT_HERSHEY_COMPLEX, 2, (100,170,0), 3) cv2.imshow ("chào thế giới", hình ảnh) cv2.waitKey (0) cv2.destroyAllWindows ()
Computer Vision và OpenCV là những chủ đề rất rộng lớn cần đề cập nhưng hướng dẫn này sẽ là điểm khởi đầu tốt để tìm hiểu OpenCV và xử lý hình ảnh.