cuốn sách gpt4 ai đã làm

opencv - Làm cách nào để trích xuất văn bản nền trước từ hình ảnh?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 21:32:13 26 4
mua khóa gpt4 Nike

Làm cách nào để sử dụng opencv để trích xuất hoàn hảo văn bản kỹ thuật số trong hình ảnh bên dưới? Màu sắc của văn bản là năng động.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

câu trả lời hay nhất

Rất đơn giản. Đoạn mã sau có thể được tối ưu hóa cao (tôi đã thực hiện nhanh chóng - @Silencer thực hiện điều này) và cũng hoạt động (đã thử nghiệm) với các hình ảnh khác (đối với một số hình ảnh, bạn sẽ phải điều chỉnh một số giá trị).

nhập khẩu cv2
nhập numpy dưới dạng np

# nhập hình ảnh
hình ảnh = cv2.imread('image.png')
cv2.imshow('bản gốc', hình ảnh)
cv2.waitKey(0)

hsv = cv2.cvtColor(hình ảnh, cv2.COLOR_BGR2HSV)
cv2.imshow('hsv', hsv[:, :, 1])
cv2.waitKey(0)

# cái này tính toán biểu đồ của hình ảnh bạn nhập
# nếu giá trị này ở dưới/dưới một giá trị nhất định (phụ thuộc vào màu sắc trong hình ảnh), một ngưỡng nhất định sẽ được chọn trong số một giá trị khác
lịch sử, thùng = np.histogram(hsv.ravel(), 256, [0, 256])
in(lịch sử[-1])

nếu lịch sử [-1] > 15000:

#nhị phân
ret, thresh = cv2.threshold(hsv[:, :, 0], 55, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
cv2.imshow('giây', thresh)
cv2.waitKey(0)

#sự giãn nở
kernel = np.ones((1, 1), np.uint8)
img_dilation = cv2.dilate(thresh, kernel, iterations=1)
cv2.imshow('giãn nở', img_dilation)
cv2.waitKey(0)

#tìm đường nét
im2, ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# sắp xếp đường viền
đã sắp xếp_ctrs = đã sắp xếp(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])

đối với i, ctr trong enumerate(sorted_ctrs):
# Nhận hộp giới hạn
x, y, w, h = cv2.boundingRect(ctr)

#Nhận ROI
roi = hình ảnh[y:y + h, x:x + w]

# hiển thị ROI
# cv2.imshow('segment no:'+str(i),roi)
cv2.hình chữ nhật(hình ảnh, (x, y), (x + w, y + h), (0, 255, 0), 2)
#cv2.waitKey(0)

nếu w > 15 và h > 15:
cv2.imwrite('roi{}.png'.format(i), roi)

cv2.imshow('khu vực được đánh dấu', hình ảnh)
cv2.waitKey(0)

khác:
#nhị phân
ret, thresh = cv2.threshold(hsv[:, :, 0], 55, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow('giây', thresh)
cv2.waitKey(0)

#sự giãn nở
kernel = np.ones((1, 1), np.uint8)
img_dilation = cv2.dilate(thresh, kernel, iterations=1)
cv2.imshow('giãn nở', img_dilation)
cv2.waitKey(0)

#tìm đường nét
im2, ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# sắp xếp đường viền
đã sắp xếp_ctrs = đã sắp xếp(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])

đối với i, ctr trong enumerate(sorted_ctrs):
# Nhận hộp giới hạn
x, y, w, h = cv2.boundingRect(ctr)

#Nhận ROI
roi = hình ảnh[y:y + h, x:x + w]

# hiển thị ROI
# cv2.imshow('segment no:'+str(i),roi)
cv2.hình chữ nhật(hình ảnh, (x, y), (x + w, y + h), (0, 255, 0), 2)
#cv2.waitKey(0)

nếu w > 15 và h > 15:
cv2.imwrite('roi{}.png'.format(i), roi)

cv2.imshow('khu vực được đánh dấu', hình ảnh)
cv2.waitKey(0)

độ phân giải

Giới thiệu về opencv - Làm cách nào để trích xuất văn bản nền trước từ hình ảnh? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/49289953/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress