预期结果是像素值在区间105150还有图像输出如何修改代码使其于预期结果一样
?
可以将代码中的阈值范围改为(104,151],并将输出图像的像素值限制在该范围内。具体做法如下:
- 将代码中的阈值范围修改为(104,151],可以使用以下代码:
threshold_img = cv2.threshold(img_gray, 104, 255, cv2.THRESH_BINARY)[1]
threshold_img = cv2.threshold(threshold_img, 151, 255, cv2.THRESH_BINARY_INV)[1]
这里使用了两次二值化操作,第一次阈值为104,将像素值小于104的设为0,大于等于104的设为255;第二次阈值为151,将像素值小于等于151的设为255,大于151的设为0,并取反。
- 将输出图像的像素值限制在(104,151]范围内,可以使用以下代码:
output_img = np.clip(output_img, 105, 150)
这里使用了NumPy库中的clip函数,将输出图像的像素值限制在105到150之间,小于105的设为105,大于150的设为150。
完整代码如下:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('input.jpg')
# 将图像转为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
threshold_img = cv2.threshold(img_gray, 104, 255, cv2.THRESH_BINARY)[1]
threshold_img = cv2.threshold(threshold_img, 151, 255, cv2.THRESH_BINARY_INV)[1]
# 模糊处理
blur_img = cv2.GaussianBlur(threshold_img, (7, 7), 0)
# 边缘检测
edges_img = cv2.Canny(blur_img, 50, 150)
# 提取轮廓
contours, hierarchy = cv2.findContours(edges_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
output_img = np.zeros_like(img)
cv2.drawContours(output_img, contours, -1, (0, 0, 255), 2)
# 限制像素值范围
output_img = np.clip(output_img, 105, 150)
# 显示图像
cv2.imshow('Input Image', img)
cv2.imshow('Output Image', output_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
``
原文地址: https://www.cveoy.top/t/topic/hj6O 著作权归作者所有。请勿转载和采集!