Trong tháng qua, tôi đã nhận được một số độc giả của PyImageSearch gửi email và hỏi cách tải xuống một hình ảnh từ một URL, sau đó chuyển đổi nó sang định dạng OpenCV [không ghi nó vào đĩa và sau đó đọc lại] — và trong bài viết này, tôi
Và như một phần thưởng, chúng ta cũng sẽ xem cách chúng ta có thể sử dụng scikit-image để tải xuống một hình ảnh từ một URL, cùng với một "gotcha" phổ biến có thể khiến bạn gặp khó khăn trong quá trình thực hiện
Tiếp tục đọc để tìm hiểu cách chuyển đổi URL thành hình ảnh bằng Python và OpenCV
Tìm kiếm mã nguồn cho bài viết này?
Jump Right To The Downloads SectionPhiên bản OpenCV và Python.
Để chạy ví dụ này, bạn cần có Python 2. 7 và OpenCV 2. 4. X.
Phương pháp đầu tiên chúng ta sẽ khám phá là chuyển đổi URL thành hình ảnh bằng thư viện OpenCV, NumPy và urllib. Mở một tệp mới, đặt tên là
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]0 và bắt đầu
# import the necessary packages import numpy as np import urllib import cv2 # METHOD #1: OpenCV, NumPy, and urllib def url_to_image[url]: # download the image, convert it to a NumPy array, and then read # it into OpenCV format resp = urllib.urlopen[url] image = np.asarray[bytearray[resp.read[]], dtype="uint8"] image = cv2.imdecode[image, cv2.IMREAD_COLOR] # return the image return image
Điều đầu tiên chúng tôi sẽ làm là các gói quan trọng hoặc cần thiết. Chúng tôi sẽ sử dụng NumPy để chuyển đổi chuỗi byte từ bản tải xuống thành mảng NumPy,
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]1 để thực hiện yêu cầu thực tế và
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]2 cho các ràng buộc OpenCV của chúng tôi
Sau đó, chúng tôi xác định chức năng
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]3 của mình trên Dòng 7. Hàm này yêu cầu một đối số duy nhất,
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]4 , là URL của hình ảnh chúng tôi muốn tải xuống
Tiếp theo, chúng tôi sử dụng thư viện
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]1 để mở kết nối tới URL được cung cấp trên Dòng 10. Chuỗi byte thô từ yêu cầu sau đó được chuyển đổi thành mảng NumPy trên Dòng 11
Lúc này mảng NumPy là mảng 1 chiều [i. e. một danh sách dài các pixel]. Để định hình lại mảng thành định dạng 2D, giả sử 3 thành phần trên mỗi pixel [i. e. các thành phần Red, Green và Blue tương ứng], chúng tôi thực hiện cuộc gọi tới
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]0 trên Dòng 12. Cuối cùng, chúng tôi trả lại hình ảnh đã giải mã cho chức năng gọi trên Dòng 15
Được rồi, đã đến lúc để chức năng này hoạt động
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]
Dòng 18-21 xác định danh sách các URL hình ảnh mà chúng tôi sẽ tải xuống và chuyển đổi sang định dạng OpenCV
Chúng tôi bắt đầu lặp qua từng URL này trên Dòng 25, gọi hàm
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]3 của chúng tôi trên Dòng 28 và cuối cùng hiển thị hình ảnh đã tải xuống của chúng tôi trên màn hình của chúng tôi trên Dòng 29 và 30. Tại thời điểm này, hình ảnh của chúng tôi có thể được thao tác với bất kỳ chức năng OpenCV nào khác như bình thường
Để xem công việc của chúng tôi đang hoạt động, hãy mở một thiết bị đầu cuối và thực hiện lệnh sau
$ python url_to_image.py
Nếu mọi việc suôn sẻ, trước tiên bạn sẽ thấy logo OpenCV
Và tiếp theo là logo của Google
Và đây là một ví dụ về việc tôi minh họa tính năng nhận diện khuôn mặt trong cuốn sách của tôi, Thực hành Python và OpenCV
Bây giờ, hãy chuyển sang phương pháp thay thế để tải xuống một hình ảnh và chuyển đổi nó sang định dạng OpenCV
Phương pháp #2. hình ảnh scikitPhương pháp thứ hai giả định rằng bạn đã cài đặt thư viện scikit-image trên hệ thống của mình. Hãy xem cách chúng ta có thể tận dụng scikit-image để tải xuống một hình ảnh từ một URL và chuyển đổi nó sang định dạng OpenCV
# METHOD #2: scikit-image from skimage import io # loop over the image URLs for url in urls: # download the image using scikit-image print "downloading %s" % [url] image = io.imread[url] cv2.imshow["Incorrect", image] cv2.imshow["Correct", cv2.cvtColor[image, cv2.COLOR_BGR2RGB]] cv2.waitKey[0]
Một trong những khía cạnh hay của thư viện hình ảnh scikit là hàm
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]2 trong gói phụ
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]3 có thể cho biết sự khác biệt giữa đường dẫn đến hình ảnh trên đĩa và URL [Dòng 39]
Tuy nhiên, có một vấn đề quan trọng thực sự có thể khiến bạn vấp ngã
OpenCV đại diện cho hình ảnh theo thứ tự BGR — trong khi scikit-image đại diện cho hình ảnh theo thứ tự RGB. Nếu bạn sử dụng chức năng scikit-image
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]2 và muốn sử dụng các chức năng OpenCV sau khi tải hình ảnh xuống, bạn cần đặc biệt cẩn thận để chuyển đổi hình ảnh từ RGB sang BGR [Dòng 41]
Nếu không thực hiện thêm bước này, bạn có thể nhận được kết quả không chính xác
Hãy xem biểu trưng của Google bên dưới để làm cho điểm này rõ ràng hơn
Vì vậy, có bạn có nó. Hai phương pháp để chuyển đổi URL thành hình ảnh bằng Python, OpenCV, urllib và scikit-image
Cái gì tiếp theo?
Thông tin khóa học.
Tổng cộng hơn 60 lớp • Hơn 64 giờ video hướng dẫn mã theo yêu cầu • Cập nhật lần cuối. Tháng 12 năm 2022
★★★★★ 4. 84 [128 Xếp hạng] • Hơn 15.800 Học sinh Ghi danh
Tôi thực sự tin rằng nếu bạn có đúng giáo viên, bạn có thể thành thạo thị giác máy tính và học sâu
Bạn có nghĩ rằng việc học thị giác máy tính và học sâu tốn nhiều thời gian, quá sức và phức tạp không?
Đó không phải là trường hợp
Tất cả những gì bạn cần để thành thạo thị giác máy tính và học sâu là nhờ ai đó giải thích mọi thứ cho bạn bằng các thuật ngữ đơn giản, trực quan. Và đó chính xác là những gì tôi làm. Nhiệm vụ của tôi là thay đổi giáo dục và cách dạy các chủ đề Trí tuệ nhân tạo phức tạp
Nếu bạn nghiêm túc về việc học thị giác máy tính, điểm dừng chân tiếp theo của bạn phải là Đại học PyImageSearch, khóa học trực tuyến về thị giác máy tính, học sâu và OpenCV toàn diện nhất hiện nay. Tại đây, bạn sẽ học cách áp dụng thành công và tự tin tầm nhìn máy tính vào công việc, nghiên cứu và dự án của mình. Tham gia cùng tôi trong việc làm chủ thị giác máy tính
Bên trong Đại học PyImageSearch, bạn sẽ tìm thấy
- ✓ Hơn 60 khóa học về chủ đề thị giác máy tính thiết yếu, học sâu và OpenCV
- ✓ Hơn 60 Chứng chỉ Hoàn thành
- ✓ Hơn 64 giờ video theo yêu cầu
- ✓ Các khóa học hoàn toàn mới được phát hành thường xuyên, đảm bảo bạn có thể theo kịp các kỹ thuật tiên tiến nhất
- ✓ Máy tính xách tay Jupyter được định cấu hình sẵn trong Google Colab
- ✓ Chạy tất cả các mẫu mã trong trình duyệt web của bạn — hoạt động trên Windows, macOS và Linux [không yêu cầu cấu hình môi trường nhà phát triển. ]
- ✓ Truy cập kho lưu trữ mã tập trung cho tất cả hơn 500 hướng dẫn trên PyImageSearch
- ✓ Dễ dàng tải xuống bằng một cú nhấp chuột đối với mã, bộ dữ liệu, mô hình được đào tạo trước, v.v.
- ✓ Truy cập trên thiết bị di động, máy tính xách tay, máy tính để bàn, v.v.
Nhấn vào đây để tham gia Đại học PyImageSearch
Tóm lượcTrong bài đăng trên blog này, chúng tôi đã tìm hiểu về hai phương pháp để tải xuống một hình ảnh từ một URL và chuyển đổi nó sang định dạng OpenCV bằng Python và OpenCV
Phương pháp đầu tiên là sử dụng gói
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]1 Python để tải xuống hình ảnh, chuyển đổi nó thành một mảng bằng NumPy và cuối cùng định hình lại mảng bằng OpenCV để xây dựng hình ảnh của chúng ta
Phương pháp thứ hai là sử dụng hàm
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]6 của scikit-image
Vậy phương pháp nào tốt hơn?
Tất cả phụ thuộc vào thiết lập của bạn
Nếu bạn đã cài đặt scikit-image, tôi sẽ sử dụng hàm
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]6 [đừng quên chuyển đổi từ RGB sang BGR nếu bạn đang sử dụng các hàm OpenCV]. Và nếu bạn chưa cài đặt scikit-image, tôi sẽ hướng dẫn chi tiết hàm
# initialize the list of image URLs to download urls = [ "//pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "//pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "//pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png", ] # loop over the image URLs for url in urls: # download the image URL and display it print "downloading %s" % [url] image = url_to_image[url] cv2.imshow["Image", image] cv2.waitKey[0]3 ở đầu bài viết này
Tôi cũng sẽ sớm thêm chức năng này vào gói imutils trên GitHub
Tải xuống Mã nguồn và Hướng dẫn tài nguyên 17 trang MIỄN PHÍ
Nhập địa chỉ email của bạn dưới đây để có được một. zip của mã và Hướng dẫn tài nguyên 17 trang MIỄN PHÍ về Thị giác máy tính, OpenCV và Học sâu. Bên trong, bạn sẽ tìm thấy các hướng dẫn, sách, khóa học và thư viện được chọn lọc thủ công của tôi để giúp bạn thành thạo CV và DL