Hướng dẫn draw rectangle opencv python - vẽ hình chữ nhật opencv python

Tôi đang cố gắng xác định vị trí các hình chữ nhật trong một hình ảnh và áp dụng một trình phân loại để nhận ra các số bên trong từng hình, sử dụng một trình phân loại được đào tạo trước đó:

Nội dung chính ShowShow

  • Giới thiệu
  • Vẽ hình chữ nhật
  • Kiểm tra mã
  • Bài đọc OpenCV đề xuất
  • Làm thế nào để bạn vẽ một hình chữ nhật trong OpenCV Python?
  • Làm thế nào để bạn vẽ nhiều hình chữ nhật trong pygame?
  • Làm thế nào để bạn vẽ hình dạng trong opencv?
  • Làm cách nào để vẽ một hình chữ nhật trong một hình ảnh bằng Python?

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

features = x_train[:8000, :, :]
labels = y_train[:8000]
list_hog_fd = []

for feature in features:
    fd = hog(feature.reshape((28, 28)), orientations=9, pixels_per_cell=(14, 14), cells_per_block=(1, 1), visualise=False)
    list_hog_fd.append(fd)
hog_features = np.array(list_hog_fd, 'float64')


clf = LinearSVC()
clf.fit(hog_features, labels)

imPath = "/Users/alessandro/Downloads/prova prova(2).jpg"
im = cv2.imread(imPath)

# Convert to grayscale and apply Gaussian filtering
im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
im_gray = cv2.GaussianBlur(im_gray, (5, 5), 0)

# Threshold the image
ret, im_th = cv2.threshold(im_gray, 90, 255, cv2.THRESH_BINARY_INV)

# Find contours in the image
ctrs, hier = cv2.findContours(im_th.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# Get rectangles contains each contour
rects = [cv2.boundingRect(ctr) for ctr in ctrs]

Từ thời điểm này trở đi, nó hoạt động hoàn hảo, với hình ảnh của riêng tôi, nhưng bất cứ khi nào tôi bắt đầu vòng lặp For, nó sẽ tạo ra "ROI" S trống, trả lại lỗi "Lỗi: Lỗi:

OpenCV (4.0.0)/người sử dụng 'Thay đổi kích thước' "

Ở dòng "ROI = cv2.resize (ROI, (28, 28), nội suy = cv2.inter_area)".

# For each rectangular region, calculate HOG features and predict
# the digit using Linear SVM.
for rect in rects:

    # Draw the rectangles
    cv2.rectangle(im, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), (0, 255, 0), 3) 

    # Make the rectangular region around the digit
    leng = int(rect[3] * 1.6)
    pt1 = int(rect[1] + rect[3] // 2 - leng // 2)
    pt2 = int(rect[0] + rect[2] // 2 - leng // 2)
    roi = im_th[pt1:pt1+leng, pt2:pt2+leng]

    # Resize the image
    roi = cv2.resize(roi, (28, 28), interpolation=cv2.INTER_AREA)
    roi = cv2.dilate(roi, (3, 3))

    #Calculate the HOG features
    roi_hog_fd = hog(roi, orientations=9, pixels_per_cell=(14, 14), cells_per_block=(1, 1), visualise=False)
    nbr = clf.predict(np.array([roi_hog_fd], 'float64'))
    cv2.putText(im, str(int(nbr[0])), (rect[0], rect[1]),cv2.FONT_HERSHEY_DUPLEX, 2, (0, 255, 255), 3)

cv2.imshow("Resulting Image with Rectangular ROIs", im)
cv2.waitKey()

Làm thế nào tôi có thể sửa mã?

P.S. Để tham khảo, hãy kiểm tra http://hanzratech.in/2015/02/24/handwritten-digit-rec nhận ra

Giới thiệu

Vẽ hình chữ nhật

Kiểm tra mã

Bài đọc OpenCV đề xuất

Vẽ hình chữ nhật

Kiểm tra mãcv2 module, so we have access to the function we need to draw rectangles on images.

Bài đọc OpenCV đề xuất

img = cv2.imread('C:/Users/N/Desktop/monument.png')

Làm thế nào để bạn vẽ một hình chữ nhật trong OpenCV Python?

  • Làm thế nào để bạn vẽ nhiều hình chữ nhật trong pygame?
  • Làm thế nào để bạn vẽ hình dạng trong opencv?
  • Làm cách nào để vẽ một hình chữ nhật trong một hình ảnh bằng Python?
  • Từ thời điểm này trở đi, nó hoạt động hoàn hảo, với hình ảnh của riêng tôi, nhưng bất cứ khi nào tôi bắt đầu vòng lặp For, nó sẽ tạo ra "ROI" S trống, trả lại lỗi "Lỗi: Lỗi:
  • OpenCV (4.0.0)/người sử dụng 'Thay đổi kích thước' "

Ở dòng "ROI = cv2.resize (ROI, (28, 28), nội suy = cv2.inter_area)".rectangle function alters the image we pass as input. This means that, if we want to keep the original image unaltered, we should do a copy of it and draw the rectangle on that copy. To learn how to perform a copy of an image in memory with OpenCV, please consult this post.

Làm thế nào tôi có thể sửa mã?rectangle function of the cv2 module, we will draw the first shape. We will draw it between (x=10, y=10) and (x=100, y=100), in green color. Also, to illustrate that the thickness is optional, we won’t set this value.

cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0))

P.S. Để tham khảo, hãy kiểm tra http://hanzratech.in/2015/02/24/handwritten-digit-rec nhận ra

cv2.rectangle(img, (120, 120), (150, 150), (255, 0, 0), 5)

Trong bài đăng này, chúng tôi sẽ học cách vẽ hình chữ nhật trên một hình ảnh, sử dụng Python và OpenCV.

cv2.rectangle(img, (200, 200), (300, 400), (0, 0, 255), -1)

Quan trọng: Các tọa độ mà tôi đã sử dụng để vẽ ba hình chữ nhật trước đó là đủ cho kích thước của hình ảnh tôi sử dụng. Tùy thuộc vào hình ảnh bạn sẽ sử dụng cho các bài kiểm tra của mình, bạn có thể cần sử dụng các tọa độ khác nhau cho các hình chữ nhật để phù hợp với bên trong.: The coordinates I’ve used to draw the previous three rectangles are adequate for the size of the image I’m using. Depending on the image you will be using for your tests, you may need to use different coordinates for the rectangles to fit inside.: The coordinates I’ve used to draw the previous three rectangles are adequate for the size of the image I’m using. Depending on the image you will be using for your tests, you may need to use different coordinates for the rectangles to fit inside.

Bây giờ chúng tôi đã vẽ xong hình ảnh của mình, chúng tôi sẽ hiển thị nó trong một cửa sổ OpenCV. Điều này được thực hiện với một cuộc gọi đến chức năng Imshow, chuyển sang đầu tiên nhập tên của cửa sổ và là hình ảnh thứ hai của chúng tôi.imshow function, passing as first input the name of the window and as second our image.imshow function, passing as first input the name of the window and as second our image.

Để hoàn thiện, chúng tôi sẽ đợi người dùng nhấn bất kỳ phím nào trên bàn phím và, khi điều đó xảy ra, phá hủy cửa sổ và kết thúc chương trình.

cv2.waitKey(0)
cv2.destroyAllWindows()

Mã Python hoàn chỉnh có thể được nhìn thấy dưới đây.

import cv2
 
img = cv2.imread('C:/Users/N/Desktop/monument.png')

cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0))
cv2.rectangle(img, (120, 120), (150, 150), (255, 0, 0), 5)
cv2.rectangle(img, (200, 200), (300, 400), (0, 0, 255), -1)


cv2.imshow('image', img)
 
cv2.waitKey(0)
cv2.destroyAllWindows()

Kiểm tra mã

Để kiểm tra tập lệnh Python trước đó, chỉ cần chạy nó trong một công cụ bạn chọn. Tôi sẽ sử dụng pycharm, một ide python.

Khi chạy mã, bạn sẽ nhận được kết quả tương tự như bản được minh họa trong Hình 1. Như có thể thấy, chúng tôi có ba hình chữ nhật trong hình ảnh. Cái đầu tiên được vẽ bằng màu xanh lá cây, với chiều rộng 1 pixel. Cái thứ hai được vẽ màu xanh lam và với các đường dày hơn. Cái thứ ba được vẽ màu đỏ và nó là một hình chữ nhật đầy. Ba được rút ra giữa các tọa độ mà chúng tôi đã chỉ định trong mã của chúng tôi, như mong đợi.

Hình 1 - Hình ảnh cuối cùng, với ba hình chữ nhật được vẽ. – Final image, with the three rectangles drawn. – Final image, with the three rectangles drawn.

Bài đọc OpenCV đề xuất

  • Cách vẽ vòng tròn
  • Cách vẽ văn bản trên hình ảnh
  • Phát hiện và đếm mặt

Làm thế nào để bạn vẽ một hình chữ nhật trong OpenCV Python?

Hình chữ nhật trong OpenCV Python: CV2 ....

Hình ảnh - đó là hình ảnh mà hình chữ nhật phải được vẽ ..

PT1 - đỉnh của hình chữ nhật ở góc trên cùng bên trái ..

PT2 - đỉnh của hình chữ nhật ở góc dưới bên phải ..

Màu sắc - Đó là màu của đường hình chữ nhật trong RGB ..

Độ dày - đó là độ dày của đường dây ..

Làm thế nào để bạn vẽ nhiều hình chữ nhật trong pygame?

Sử dụng một nhóm sẽ cho phép bạn vẽ tất cả các hình chữ nhật cùng một lúc.Bạn có thể thay đổi hình chữ nhật bằng hàm Change_Value.Làm thế nào tôi có thể thay đổi vị trí của từng cá nhân?Tôi muốn chúng được liên kết trong một hàng lần lượt.. You can change the rectangles using the change_value function. How would I go about changing the position of each individual sprite? I want them aligned in a row one after another.. You can change the rectangles using the change_value function. How would I go about changing the position of each individual sprite? I want them aligned in a row one after another.

Làm thế nào để bạn vẽ hình dạng trong opencv?

Một số chức năng vẽ là:...

line (): Được sử dụng để vẽ dòng trên một hình ảnh ..

Hình chữ nhật (): Được sử dụng để vẽ hình chữ nhật trên hình ảnh ..

Circle (): Được sử dụng để vẽ vòng tròn trên một hình ảnh ..

puttext (): Được sử dụng để viết văn bản trên hình ảnh ..

Làm cách nào để vẽ một hình chữ nhật trong một hình ảnh bằng Python?

Python - OpenCV & PyQT5 cùng nhau trong chương trình này, chúng ta sẽ vẽ một hình chữ nhật bằng hình chữ nhật hàm openCV ().Hàm này có một số tham số như tọa độ bắt đầu, kết thúc tọa độ, màu sắc và độ dày và chính hình ảnh.using the OpenCV function rectangle(). This function takes some parameters like starting coordinates, ending coordinates, color and thickness and the image itself.using the OpenCV function rectangle(). This function takes some parameters like starting coordinates, ending coordinates, color and thickness and the image itself.