How to solve the problem of # binarization #?

donkey18 注册会员
2023-02-27 21:03

This answer quotes ChatGPT

To implement this function, you need to use the Python image processing library OpenCV. Here are the basic steps to implement this functionality:

1. Read the picture and convert it into grayscale image.

2. Carry out threshold processing for gray image, turn the area framed by orange line into white, and other areas into black.

3. Expand the image after threshold processing to fill the gap around the orange line.

4. Detect the contour of the expanded image and find the contour of the orange line.

5. Based on the contour information, create an all-black image with the same size as the original image.

6. On the all black image, fill the area framed by the orange line with white.

7. The original image and the full black image after filling are operated by bit and then the final result is obtained.

Here is sample code to implement this:

import cv2
import numpy as np

# 读取图片并转换为灰度图像
img = cv2.imread('img.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 对灰度图像进行阈值处理,将橙色线框起来的区域变为白色,其他区域变为黑色
thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)[1]

# 对阈值处理后的图像进行膨胀操作
kernel = np.ones((5,5), np.uint8)
dilation = cv2.dilate(thresh, kernel, iterations=2)

# 对膨胀后的图像进行轮廓检测,找到橙色线的轮廓
contours, hierarchy = cv2.findContours(dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 创建一个与原图像大小相同的全黑图像
mask = np.zeros_like(img)

# 在全黑图像上,用白色填充橙色线框起来的区域
cv2.drawContours(mask, contours, -1, (255,255,255), thickness=-1)

# 将原图像和填充后的全黑图像进行按位与操作,得到最终的结果
result = cv2.bitwise_and(img, mask)

# 将框外背景颜色变为黑色
result[np.where((result == [0,0,0]).all(axis=2))] = [0,0,0]

# 显示最终结果
cv2.imshow('Result', result)

About the Author

Question Info

Publish Time
2023-02-27 21:03
Update Time
2023-02-27 21:03