Ý nghĩa của hình ảnh OpenCV Python
Để so sánh hai hình ảnh, chúng tôi sử dụng Lỗi bình phương trung bình (MSE) của các giá trị pixel của hai hình ảnh. Các hình ảnh tương tự sẽ có ít giá trị lỗi bình phương hơn. Sử dụng phương pháp này, chúng ta có thể so sánh hai hình ảnh có cùng chiều cao, chiều rộng và số lượng kênh Show bướcBạn có thể sử dụng các bước sau để so sánh hai hình ảnh bằng OpenCV − Nhập thư viện cần thiết. Trong tất cả các ví dụ Python sau, thư viện Python bắt buộc là OpenCV. Hãy chắc chắn rằng bạn đã cài đặt nó import cv2 Đọc hình ảnh đầu vào bằng cv2. imread() và chuyển đổi nó thành thang độ xám. Chiều cao, chiều rộng và số kênh của các hình ảnh phải giống nhau img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) Xác định một hàm để tính toán Lỗi bình phương trung bình giữa hai hình ảnh def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse Tính toán Lỗi bình phương trung bình (Lỗi khớp) giữa các hình ảnh error = mse(img1, img2) In lỗi khớp hình ảnh (mse) và hiển thị sự khác biệt hình ảnh print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows() In giá trị kết quả, số liệu khớp hình ảnh. Giá trị càng thấp thì càng phù hợp print("Matching Image 1 with Image 2:", ret12) Hãy xem xét một số ví dụ để hiểu rõ hơn Chúng tôi sẽ sử dụng các hình ảnh sau đây làm Tệp đầu vào trong các ví dụ bên dưới ví dụ 1Trong ví dụ này, chúng tôi tạo một Mạng nơ-ron nhân tạo đơn giản với bốn lớp không có chức năng chuyển tiếp đầu raKhi thực thi, nó sẽ tạo ra đầu ra sau trên bàn điều khiển - Image matching Error between the two images: 3.0696934396076028 Và chúng tôi nhận được cửa sổ sau hiển thị sự khác biệt giữa hai hình ảnh - ví dụ 2Trong chương trình Python này, chúng tôi so sánh ba hình ảnh
đầu raKhi thực thi, chương trình Python ở trên sẽ tạo đầu ra sau trên bàn điều khiển - ________số 8Và chúng tôi nhận được cửa sổ sau, hiển thị sự khác biệt giữa các hình ảnh - Lưu ý rằng lỗi Matching giữa Image1 và Image2 ít hơn so với lỗi Matching giữa Image 1 & 3 và giữa Image 2 & 3. Vì vậy, Hình 1 và Hình 2 giống nhau hơn Trong bài viết này, chúng tôi sẽ cố gắng mở một hình ảnh bằng cách sử dụng thư viện OpenCV (Open Source Computer Vision). Các loại tệp sau đây được hỗ trợ trong thư viện OpenCV
Để sử dụng được thư viện OpenCV trong python thì điều kiện tiên quyết chúng ta cần cài đặt các thư viện này
Để cài đặt các thư viện này, chúng ta cần chạy các lệnh pip này trong cmd pip install opencv-python pip install numpy pip install matplotlib Các bước để đọc và hiển thị một hình ảnh trong OpenCV là 1. Đọc ảnh bằng hàm imread() 2. Tạo cửa sổ GUI và hiển thị hình ảnh bằng hàm imshow() 3. Sử dụng hàm waitkey(0) để giữ cửa sổ hình ảnh trên màn hình theo số giây đã chỉ định, o nghĩa là cho đến khi người dùng đóng nó, nó sẽ giữ cửa sổ GUI trên màn hình 4. Xóa cửa sổ hình ảnh khỏi bộ nhớ sau khi hiển thị bằng hàm destroyAllWindows() Hãy bắt đầu đọc một hình ảnh. sử dụng cv2.
Ghi chú.
Tất cả ba loại cờ được mô tả dưới đây
Các mã dưới đây là các triển khai để đọc hình ảnh và hiển thị hình ảnh trên màn hình bằng các hàm thư viện OpenCV và matplotlib. Hình ảnh được sử dụng là
Python3print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()6 print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()7 print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()8
print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()9 print("Matching Image 1 with Image 2:", ret12)0 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)00 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)01 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)02____103 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)04
img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)05 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)06 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)07 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)08 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)09 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse00
def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse01 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse02 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse03 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse04 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse05 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse06 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse07 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse08 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse09
img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)00 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)01 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)02 đầu ra Đọc hình ảnh bằng cv2 ở định dạng BGR Chúng ta có thể nhìn thấy hình dạng, tôi. e. , chiều rộng và chiều cao và các kênh của hình ảnh bằng thuộc tính hình dạng img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)0 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse0 Thư viện Matplotlib sử dụng định dạng màu RGB để đọc ảnh màu. Ở đây chúng tôi đang trình bày một ví dụ về đọc một hình ảnh bằng thư viện này. Python3img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)03 print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()7 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)05 print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()7 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)07 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)00 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)01 img1 = cv2.imread('panda.png') img2 = cv2.imread('panda1.png') img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)02 print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()11 def mse(img1, img2): h, w = img1.shape diff = cv2.subtract(img1, img2) err = np.sum(diff**2) mse = err/(float(h*w)) return mse09 print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()13 print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()14
print("Image matching Error between the two images:", mse) cv2.imshow("Contour", img) cv2.waitKey(0) cv2.destroyAllWindows()15 Đọc ảnh bằng cv2 và hiển thị bằng matplotlib sẽ hiển thị ảnh ở định dạng BGR Ghi chú. Xem sự khác biệt về màu sắc của hình ảnh được đọc bởi thư viện cv2 và matplotlib. Vì cv2 sử dụng định dạng màu BGR và matplotlib sử dụng định dạng màu RGB. Để chuyển đổi BGR sang RGB, chúng tôi sử dụng một chức năng cv2 có nghĩa là gì trong Python?cv2 là tên nhập mô-đun cho opencv-python , "Gói OpenCV chỉ dành cho CPU dựng sẵn không chính thức dành cho Python". OpenCV truyền thống có nhiều bước phức tạp liên quan đến việc xây dựng mô-đun từ đầu, điều này là không cần thiết. Tôi khuyên bạn nên sử dụng thư viện opencv-python.
Hình ảnh được thể hiện như thế nào trong OpenCV?Trong OpenCV, hình ảnh được biểu diễn dưới dạng mảng Numpy 3 chiều . Một hình ảnh bao gồm các hàng pixel và mỗi pixel được biểu thị bằng một mảng các giá trị biểu thị màu của nó. Ở đâu [72 99 143] , v.v. , là các giá trị xanh dương, xanh lục và đỏ (BGR) của một pixel đó.
Bạn có thể tính trung bình các giá trị RGB không?Đây là mẹo nhanh dành cho những người thấy mình cần tính trung bình nhiều màu RGB vì một số lý do. Phương pháp điển hình để lấy trung bình các màu RGB là cộng tất cả các giá trị màu đỏ, xanh lá cây và xanh lam rồi chia mỗi giá trị cho số lượng pixel để có được các thành phần của màu cuối cùng. |