Tôi không khuyên dùng thang độ xám cho hình ảnh của bạn. Bạn có vẻ thích hoa đỏ so với nền xanh. Một cách đơn giản và rõ ràng để tạo sự khác biệt đó trong hình ảnh của bạn để xác định với bông hoa bất kỳ pixel nào có giá trị màu đỏ cao hơn giá trị màu lục của nó
import cv2
from numpy import array
img = cv2.imread['flower.jpg']
img2 = array[ 200 * [img[:,:,2] > img[:,:, 1]], dtype='uint8']
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]9 cho thấy rõ hình dạng của bông hoa. Để chỉ lấy các cạnh, bạn có thể sử dụng máy dò cạnh canny
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
Tệp kết quả,
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]0, trông giống như
Bước tiếp theo, nếu bạn muốn, là trích xuất tọa độ của các cạnh. Điều này có thể được thực hiện với
contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
Tài liệu về
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]1 và
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]2 có thể được tìm thấy ở đây và ở đây, tương ứng
Hơn. Điều gì xảy ra nếu bạn sử dụng thang độ xám
img = cv2.imread['flower.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE]
gray1 = cv2.Canny[img, 70, 50]
cv2.imwrite['gray1.png', gray1]
hình ảnh kết quả là
Cách tiếp cận thang độ xám cho thấy rất nhiều cấu trúc bên trong của bông hoa. Điều đó tốt hay xấu phụ thuộc vào mục tiêu của bạn
Có thể khắc phục sự cố giống hệt Hình dạng hình ảnh Pil bằng cách sử dụng một phương pháp thay thế, phương pháp này sẽ được thảo luận chi tiết hơn cùng với một số mẫu mã bên dưới
from PIL import Image im = Image.open['whatever.png'] width, height = im.size
Chúng tôi đã trình bày rất nhiều ví dụ minh họa để chỉ ra cách giải quyết vấn đề Hình dạng Hình ảnh Pil và chúng tôi cũng đã giải thích cách thực hiện
Làm thế nào để bạn tìm thấy hình dạng của một hình ảnh PIL?
Cách lấy kích thước của hình ảnh bằng PIL trong Python
- hình ảnh = PIL. Hình ảnh. mở ["mẫu. png"] để mở hình ảnh
- chiều rộng, chiều cao = hình ảnh. kích thước. trích xuất chiều rộng và chiều cao từ bộ dữ liệu đầu ra
- in [chiều rộng, chiều cao]
Hình ảnh hình ảnh PIL là gì?
PIL là Thư viện hình ảnh Python cung cấp trình thông dịch python với khả năng chỉnh sửa hình ảnh. Mô-đun Hình ảnh cung cấp một lớp có cùng tên được sử dụng để thể hiện hình ảnh PIL. 17-Jul-2019
Làm thế nào để bạn định hình một hình ảnh trong Python?
Khi làm việc với OpenCV Python, hình ảnh được lưu trữ trong numpy ndarray. Để có được hình dạng hoặc kích thước hình ảnh, hãy sử dụng ndarray. shape để lấy kích thước của hình ảnh. Sau đó, bạn có thể sử dụng chỉ mục trên biến dimensions để lấy chiều rộng, chiều cao và số lượng kênh cho mỗi pixel
Hình dạng trong OpenCV là gì?
Kích thước của một hình ảnh nhất định như chiều cao của hình ảnh, chiều rộng của hình ảnh và số lượng kênh trong hình ảnh được gọi là hình dạng của hình ảnh. Hình dạng của hình ảnh được lưu trữ trong numpy. ndarray
Hình dạng của một hình ảnh là gì?
Hình dạng của một hình ảnh là một vectơ giữ chiều dài của mỗi trục của hình ảnh. Mặc dù thông tin này cũng có sẵn trong chức năng tóm tắt, nhưng nó hữu ích đến mức có thể lấy trực tiếp. Cả hình ảnh có giá trị Float và Complex đều được hỗ trợ
một hình ảnh là gì?
Chụp ảnh hình dạng là hình thức hai chiều của các đối tượng khi máy ảnh của bạn chụp chúng. Chẳng hạn, nếu bạn nhìn vào hình ảnh một quả bóng, bạn sẽ thấy hình dạng của nó là hình tròn. Tương tự như vậy, nếu bạn nhìn vào bức tranh vẽ một chiếc vali hình lập phương, bạn sẽ thấy hình dạng của nó giống như một hình vuông.
PIL có thể mở những loại hình ảnh nào?
Gối đọc các tệp JPEG, JFIF và Adobe JPEG chứa dữ liệu L , RGB hoặc CMYK
PIL có hoạt động với PNG không?
PIL là thư viện miễn phí bổ sung khả năng xử lý hình ảnh cho trình thông dịch Python của bạn, hỗ trợ nhiều định dạng tệp hình ảnh như PPM, PNG, JPEG, GIF, TIFF và BMP. 09-09-2015
PIL và Gối có giống nhau không?
PIL/Gối là gì? . Gối là một nhánh của PIL có thêm một số tính năng thân thiện với người dùng
Hình dạng hình ảnh là gì [. 2 bằng Python?
hình dạng[. 2] là một ví dụ về giải nén bộ dữ liệu, với nó, bạn trích xuất các giá trị hàng và cột từ bộ dữ liệu hình dạng. Hiển thị hoạt động trên bài đăng này. Thuộc tính hình dạng của đối tượng img rõ ràng là một danh sách chứa một số dữ liệu hình ảnh, hai phần tử đầu tiên ở đây được sao chép vào các biến chiều cao và chiều rộng. 01-Feb-2021
Gối cung cấp một mô-đun vẽ có tên là
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]5 mà bạn có thể sử dụng để tạo đồ họa 2D đơn giản trên các đối tượng
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]6 của mình. Theo tài liệu của Gối, "bạn có thể sử dụng mô-đun này để tạo hình ảnh mới, chú thích hoặc chỉnh sửa hình ảnh hiện có và tạo đồ họa nhanh chóng để sử dụng trên web. "
Nếu bạn cần các khả năng vẽ nâng cao hơn những gì có trong Gối, bạn có thể nhận một gói riêng gọi là aggdraw
Bạn sẽ tập trung vào những gì đi kèm với Gối trong bài viết này. Cụ thể, bạn sẽ tìm hiểu về những điều sau đây
- Thông số chung
- vẽ đường
- Vẽ vòng cung
- Vẽ hợp âm
- Vẽ hình elip
- Vẽ lát bánh
- Vẽ đa giác
- Vẽ hình chữ nhật
Khi vẽ bằng Gối, nó sử dụng cùng một hệ tọa độ mà bạn đã sử dụng với phần còn lại của Gối. Góc trên bên trái vẫn là [0,0] chẳng hạn. Nếu bạn vẽ ra ngoài giới hạn hình ảnh, những pixel đó sẽ bị loại bỏ
Nếu bạn muốn chỉ định một màu, bạn có thể sử dụng một dãy số hoặc bộ dữ liệu như khi sử dụng
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]7. Đối với hình ảnh “1”, “L” và “I”, hãy sử dụng số nguyên. Đối với hình ảnh “RGB”, hãy sử dụng bộ 3 chứa các giá trị số nguyên. Bạn cũng có thể sử dụng tên màu được Gối hỗ trợ mà bạn đã học ở chương 2
Thông số chung
Khi bạn sử dụng các phương pháp vẽ khác nhau, bạn sẽ phát hiện ra rằng chúng có rất nhiều tham số chung mà chúng chia sẻ. Thay vì giải thích các thông số giống nhau trong mọi phần, bạn sẽ tìm hiểu về chúng ngay từ đầu
xy
Hầu hết các phương pháp vẽ đều có tham số
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]8 đặt vùng hình chữ nhật để vẽ hình trong đó. Điều này có thể được định nghĩa theo hai cách sau
- [[phía trên bên trái x, phía trên bên trái y], [phía dưới bên phải x, phía dưới bên phải y]] hoặc đơn giản [[x1, y1], [x2, y2]]
- Bộ hộp của [x1, y1, x2, y2]
Khi cần vẽ một đường thẳng, đa giác hoặc điểm, nhiều tọa độ được chỉ định theo một trong hai cách này
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]
9
00edges = cv2.Canny[img2, 70, 50] cv2.imwrite['edges.png', edges]
Phương thức
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
01 sẽ vẽ một đường thẳng, nối từng điểm. edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
02 sẽ vẽ một đa giác trong đó mỗi điểm được kết nối. Cuối cùng, edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
03 sẽ vẽ một điểm 1 pixel tại mỗi điểmlấp đầy
Tham số,
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
04, được sử dụng để đặt màu tô cho hình dạng. Cách bạn đặt edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
04 được xác định bởi chế độ của hình ảnh
06. Đặt từng giá trị màu [0-255] bằng cách sử dụng [R, G, B] hoặc tên màuedges = cv2.Canny[img2, 70, 50] cv2.imwrite['edges.png', edges]
07 [thang độ xám]. Đặt giá trị [0-255] làm số nguyênedges = cv2.Canny[img2, 70, 50] cv2.imwrite['edges.png', edges]
Mặc định là
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
08 hoặc không điềnđề cương
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
09 đặt màu đường viền cho bản vẽ của bạn. Thông số kỹ thuật của nó giống như thông số kỹ thuật bạn sử dụng cho edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
04Giá trị mặc định là
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
08, có nghĩa là không có đường viềnBây giờ bạn đã biết về các tham số phổ biến, bạn có thể tiếp tục và tìm hiểu cách bắt đầu vẽ
vẽ đường
Kiểu vẽ đầu tiên bạn sẽ học là cách vẽ các đường thẳng trong Gối. Tất cả các hình dạng được tạo thành từ các đường. Trong trường hợp của Gối, một đường được vẽ bằng cách cho Gối biết tọa độ đầu và cuối để vẽ đường giữa. Ngoài ra, bạn có thể chuyển vào một loạt tọa độ XY và Gối sẽ vẽ các đường để kết nối các điểm
Sau đây là định nghĩa phương thức
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
01contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
3Bạn có thể thấy rằng nó chấp nhận một số tham số khác nhau. Bạn đã biết ý nghĩa của một số tham số này trong phần trước. Tham số
contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
43 được sử dụng để kiểm soát độ rộng của các dòngTrước khi học cách sử dụng
contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
44, bạn nên học cách vẽ các đường mà không có nó. Nhưng trước tiên, bạn sẽ cần một hình ảnh để vẽ lên. Bạn sẽ sử dụng hình ảnh này của một trong những cây cầu của Quận MadisonCầu có mái che Quận Madison
Bây giờ, hãy mở trình soạn thảo Python của bạn và tạo một tệp mới có tên
contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
45 rồi thêm mã này vào đó# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]
Tại đây, bạn mở hình ảnh trong Gối và sau đó chuyển đối tượng
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]6 cho
contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
47, đối tượng này trả về đối tượng # draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]5. Bây giờ bạn có thể vẽ các đường trên hình ảnh của mình. Trong trường hợp này, bạn sử dụng vòng lặp
contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
49 để vẽ năm đường trên hình ảnh. Hình ảnh bắt đầu bắt đầu tại [0,0] trong vòng lặp đầu tiên. Sau đó, vị trí X thay đổi trong mỗi lần lặp. Điểm cuối là kích thước của hình ảnhBạn sử dụng mô-đun
img = cv2.imread['flower.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE]
gray1 = cv2.Canny[img, 70, 50]
cv2.imwrite['gray1.png', gray1]
20 để chọn một màu ngẫu nhiên từ danh sách các màu. Khi bạn chạy mã này, đầu ra sẽ giống như thế nàyCác đường được vẽ trên một hình ảnh
Bây giờ bạn có thể thử tạo một loạt các điểm và vẽ các đường theo cách đó. Tạo một tệp mới có tên
img = cv2.imread['flower.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE]
gray1 = cv2.Canny[img, 70, 50]
cv2.imwrite['gray1.png', gray1]
21 và đặt mã này vào tệp của bạnedges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
0Lần này bạn tạo một hình ảnh bằng Gối thay vì vẽ trên một hình ảnh của riêng bạn. Sau đó, bạn tạo một danh sách các điểm. Để làm cho các đường kết nối trông đẹp hơn, bạn có thể đặt tham số
contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
44 thành "curve". Nếu bạn xem mã nguồn của phương thức edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
01, bạn sẽ thấy rằng "đường cong" là giá trị hợp lệ duy nhất để cung cấp cho nó ngoài edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
08. Điều này có thể thay đổi trong phiên bản Gối trong tương laiKhi bạn chạy mã này, hình ảnh của bạn sẽ trông như thế này
Vẽ các đường nối
Bây giờ hãy thử xóa tham số
contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
44 khỏi mã của bạn và chạy lại ví dụ. Đầu ra của bạn bây giờ sẽ trông như thế nàyĐường không khớp
Bằng cách đặt
contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
44 thành "đường cong", đầu ra sẽ dễ nhìn hơn một chútBây giờ bạn đã sẵn sàng tìm hiểu về cách vẽ các cung bằng Gối
Vẽ vòng cung
Một cung là một đường cong. Bạn có thể vẽ các vòng cung với Pillow top. Đây là đặc tả phương pháp
img = cv2.imread['flower.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE]
gray1 = cv2.Canny[img, 70, 50]
cv2.imwrite['gray1.png', gray1]
27contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
4Một
img = cv2.imread['flower.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE]
gray1 = cv2.Canny[img, 70, 50]
cv2.imwrite['gray1.png', gray1]
27 cũng có thể được thực hiện bằng cách sử dụng # draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]8 điểm. Tham số
from PIL import Image im = Image.open['whatever.png'] width, height = im.size40 xác định góc bắt đầu, tính bằng độ. Tham số
from PIL import Image im = Image.open['whatever.png'] width, height = im.size41 cho Gối biết góc kết thúc là gì, góc này cũng tính bằng độ. Hai tham số khác là những tham số đã được giới thiệu
Để xem cách bạn có thể vẽ một cung, hãy tạo một tệp mới có tên là
from PIL import Image im = Image.open['whatever.png'] width, height = im.size42 và thêm mã này vào đó
img = cv2.imread['flower.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE]
gray1 = cv2.Canny[img, 70, 50]
cv2.imwrite['gray1.png', gray1]
2Trong mã này, bạn tạo một hình ảnh mới với nền trắng. Sau đó, bạn tạo đối tượng
from PIL import Image im = Image.open['whatever.png'] width, height = im.size43 của mình. Tiếp theo, bạn tạo hai vòng cung khác nhau. Vòng cung đầu tiên sẽ được lấp đầy bằng màu xanh lá cây. Vòng cung thứ hai sẽ được tô màu vàng, nhưng chiều rộng đường của nó sẽ là 5. Khi bạn vẽ một cung, phần tô có nghĩa là màu đường của cung. Bạn không tự lấp đầy vòng cung
Khi bạn chạy mã này, hình ảnh đầu ra của bạn sẽ trông như thế này
Vẽ vòng cung
Hãy thử thay đổi một số tham số và chạy lại mã để xem cách bạn có thể tự thay đổi các cung
Bây giờ chúng ta hãy tiếp tục và tìm hiểu về cách vẽ hợp âm
Vẽ hợp âm
Gối cũng hỗ trợ khái niệm về hợp âm. Một hợp âm giống như một cung ngoại trừ các điểm cuối được kết nối với một đường thẳng
Đây là định nghĩa phương thức của
from PIL import Image im = Image.open['whatever.png'] width, height = im.size44
from PIL import Image im = Image.open['whatever.png'] width, height = im.size4
Sự khác biệt duy nhất ở đây là bạn cũng có thể thêm một màu
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
09. Màu này có thể được chỉ định theo bất kỳ cách nào mà bạn có thể chỉ định màu edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
04Tạo một tệp mới và đặt tên là
from PIL import Image im = Image.open['whatever.png'] width, height = im.size47. Sau đó, thêm mã này để bạn có thể xem cách bạn tự tạo hợp âm
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]4
Ví dụ này sẽ vẽ hai hợp âm trên một hình ảnh màu xanh lá cây. Hợp âm đầu tiên được tô màu đỏ. Hợp âm thứ hai được tô màu vàng nhưng được viền màu xanh lam. Đường viền màu xanh có chiều rộng là 5
Khi bạn chạy mã này, bạn sẽ tạo ra hình ảnh sau
Vẽ hợp âm
Điều đó có vẻ khá tốt. Hãy tiếp tục và chơi xung quanh với ví dụ này. Bạn sẽ sớm thành thạo việc tạo hợp âm với Gối với một chút luyện tập
Bây giờ chúng ta hãy tiếp tục và tìm hiểu về cách vẽ hình elip
Vẽ hình elip
Một hình elip hoặc hình bầu dục được vẽ trong Gối bằng cách đặt cho nó một hộp giới hạn [xy]. Bạn đã thấy điều này vài lần khác trong các phần trước
Đây là định nghĩa phương thức
from PIL import Image im = Image.open['whatever.png'] width, height = im.size48
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]6
from PIL import Image im = Image.open['whatever.png'] width, height = im.size48 cho phép bạn tô màu, thêm viền màu [
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
09] và thay đổi contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
43 của edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
09 đóĐể xem cách bạn có thể tạo một
from PIL import Image im = Image.open['whatever.png'] width, height = im.size48, hãy tạo một tệp mới có tên là
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]44 và thêm mã này vào đó
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]3
Trong mã này, bạn tạo một hình ảnh đẹp màu trắng thông qua phương pháp
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]45. Sau đó, bạn vẽ một hình elip màu đỏ trên đó. Cuối cùng, bạn vẽ một hình elip thứ hai được tô màu vàng và viền màu đen trong đó chiều rộng đường viền được đặt thành 5
Khi bạn chạy đoạn mã này, hình ảnh mà nó tạo ra sẽ như thế này
Vẽ hình elip
Bạn có thể tạo hình bầu dục và hình tròn bằng cách sử dụng
from PIL import Image im = Image.open['whatever.png'] width, height = im.size48. Hãy dùng thử và xem bạn có thể làm gì với nó
Bây giờ chúng ta cùng tìm hiểu cách tạo các lát bánh
Vẽ lát bánh
Một lát bánh giống như
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]47, nhưng cũng vẽ các đường thẳng giữa các điểm cuối và tâm của hộp giới hạn
Đây là cách định nghĩa phương thức
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]48
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]8
Bạn đã sử dụng tất cả các tham số này trong các bản vẽ khác. Để xem lại,
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
04 thêm màu vào bên trong của # draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]48 trong khi
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
09 thêm viền màu vào hìnhĐể bắt đầu thực hành hình dạng này, hãy tạo một tệp mới có tên
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]62 và thêm mã này vào tệp của bạn
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]0
Trong mã này, bạn tạo một hình ảnh màu xám để vẽ trên đó. Sau đó, bạn tạo hai lát bánh.
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]48 đầu tiên được tô màu xanh lục. Cái thứ hai không được điền, nhưng nó có màu vàng
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
09. Lưu ý rằng mỗi # draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]48 có mức độ bắt đầu và kết thúc khác nhau
Khi bạn chạy mã này, bạn sẽ nhận được hình ảnh sau
Vẽ lát bánh
Với một chút công việc, bạn có thể tạo biểu đồ hình tròn bằng Gối. Bạn nên thử với mã của mình một chút và thay đổi một số giá trị. Bạn sẽ nhanh chóng học được cách làm những lát bánh đẹp mắt của riêng mình
Bây giờ hãy cùng tìm hiểu cách vẽ đa giác bằng Gối
Vẽ đa giác
Đa giác là một hình dạng hình học có số điểm [đỉnh] và số đoạn thẳng hoặc cạnh bằng nhau. Hình vuông, hình tam giác và hình lục giác đều là các loại đa giác. Gối cho phép bạn tạo đa giác của riêng mình. Tài liệu của Gối định nghĩa một đa giác như thế này. Đường viền đa giác bao gồm các đường thẳng giữa các tọa độ đã cho, cộng với một đường thẳng giữa tọa độ cuối cùng và đầu tiên
Đây là định nghĩa mã của phương thức
edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
02# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]1
Tất cả các thông số này giờ đã quen thuộc với bạn. Hãy tiếp tục và tạo một tệp Python mới và đặt tên là
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]67. Sau đó thêm mã này
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]2
Đoạn mã này sẽ tạo ra một hình ảnh màu xám giống như ví dụ cuối cùng trong phần trước. Sau đó, nó sẽ tạo ra một đa giác được tô màu xanh lục. Sau đó, nó sẽ tạo ra một đa giác thứ hai và phác thảo nó bằng màu vàng mà không cần tô màu
Trong cả hai hình vẽ, bạn đang cung cấp ba điểm. Điều đó sẽ tạo ra hai hình tam giác
Khi bạn chạy mã này, bạn sẽ nhận được kết quả này
Vẽ đa giác
Hãy thử thay đổi mã bằng cách thêm các điểm bổ sung vào một hoặc nhiều đa giác trong mã ở trên. Với một chút luyện tập, bạn sẽ có thể tạo các đa giác phức tạp một cách nhanh chóng với Gối
Vẽ hình chữ nhật
Phương pháp
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]68 cho phép bạn vẽ hình chữ nhật hoặc hình vuông bằng Gối. Đây là cách
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]68 được định nghĩa
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]3
Bạn có thể chuyển vào hai bộ dữ liệu xác định tọa độ đầu và cuối để vẽ hình chữ nhật. Hoặc bạn có thể cung cấp bốn tọa độ dưới dạng bộ hộp [bộ 4 mục]. Sau đó, bạn có thể thêm một ________ 109, ________ 104 bằng màu sắc và thay đổi đường viền ________ 243
Tạo một tệp mới và đặt tên là
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]33. Sau đó điền mã này vào để bạn có thể bắt đầu vẽ hình chữ nhật
# draw_line.py import random from PIL import Image, ImageDraw def line[image_path, output_path]: image = Image.open[image_path] draw = ImageDraw.Draw[image] colors = ["red", "green", "blue", "yellow", "purple", "orange"] for i in range[0, 100, 20]: draw.line[[i, 0] + image.size, width=5, fill=random.choice[colors]] image.save[output_path] if __name__ == "__main__": line["madison_county_bridge_2.jpg", "lines.jpg"]4
Mã này sẽ tạo ra một hình ảnh màu xanh có kích thước 400x400 pixel. Sau đó, nó sẽ vẽ hai hình chữ nhật. Hình chữ nhật đầu tiên sẽ được tô màu đỏ. Cái thứ hai sẽ có màu xanh lục và viền màu vàng
Khi bạn chạy mã này, bạn sẽ nhận được hình ảnh này dưới dạng đầu ra
Vẽ hình chữ nhật
Không phải là những hình chữ nhật đáng yêu? . Bạn cũng có thể sửa đổi chiều rộng đường viền mà bạn thêm vào hình chữ nhật
kết thúc
Bạn có thể sử dụng Gối để thêm hình dạng vào hình ảnh của mình. Điều này có thể hữu ích khi thêm đường viền vào hình ảnh của bạn, làm nổi bật một hoặc nhiều phần hình ảnh của bạn, v.v.
Trong bài viết này, bạn đã tìm hiểu về các chủ đề sau
- Thông số chung
- vẽ đường
- Vẽ vòng cung
- Vẽ hợp âm
- Vẽ hình elip
- Vẽ lát bánh
- Vẽ đa giác
- Vẽ hình chữ nhật
Bạn có thể làm rất nhiều với các hình dạng được cung cấp bởi Gối. Bạn nên lấy những ví dụ này và sửa đổi chúng để kiểm tra chúng bằng ảnh của chính bạn. Hãy thử và xem những gì bạn có thể nghĩ ra