Làm thế nào để bạn tìm thấy hình dạng của một hình ảnh trong python?

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
  • edges = cv2.Canny[img2, 70, 50]
    cv2.imwrite['edges.png', edges]
    
    00

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ểm

lấ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

  • edges = cv2.Canny[img2, 70, 50]
    cv2.imwrite['edges.png', edges]
    
    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àu
  • edges = cv2.Canny[img2, 70, 50]
    cv2.imwrite['edges.png', edges]
    
    07 [thang độ xám]. Đặt giá trị [0-255] làm số nguyên

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]
04

Giá 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ền

Bâ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]
01

contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
3

Bạ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òng

Trướ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 Madison

Cầ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 ảnh

Bạ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ày

Cá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ạn

edges = cv2.Canny[img2, 70, 50]
cv2.imwrite['edges.png', edges]
0

Lầ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 lai

Khi 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út

Bâ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]
27

contours, hierarchy = cv2.findContours[edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE]
4

Mộ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.size
40 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.size
41 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.size
42 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]
2

Trong 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.size
43 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.size
44

from PIL import Image

im = Image.open['whatever.png']
width, height = im.size
4

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]
04

Tạo một tệp mới và đặt tên là

from PIL import Image

im = Image.open['whatever.png']
width, height = im.size
47. 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.size
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"]
6

from PIL import Image

im = Image.open['whatever.png']
width, height = im.size
48 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.size
48, 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.size
48. 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

Hình dạng IMG trong Python là gì?

Hình dạng của hình ảnh được truy cập bởi img. hình dạng . Nó trả về một bộ số lượng hàng, cột và kênh [nếu hình ảnh có màu]. >>> in[ img. hình dạng ]

Hình dạng IMG nào trở lại?

Có thể sử dụng phương thức shape của đối tượng mảng có nhiều mảng để tìm số hàng [ height ], số cột [ width ] và số kênh của hình ảnh. Cảnh báo. Đối với ảnh thang xám, ảnh. shape sẽ chỉ trả về hai tham số- số hàng, số cột .

Chủ Đề