如何在Python OpenCV中对图像特定区域应用阈值处理?
针对图像特定区域执行阈值处理的方法
完全可以只对图像的特定区域而非整幅图执行阈值处理,核心思路是先提取目标区域(ROI),单独对该区域做阈值处理后再放回原图像。
针对你提供的代码,修改步骤如下:
- 明确要处理的区域坐标
(x1,y1)到(x2,y2),注意OpenCV中图像的坐标顺序是先行后列(即y方向在前,x方向在后) - 提取该区域的灰度图ROI
- 对ROI执行阈值处理
- 将处理后的ROI替换回原灰度图像
修改后的完整代码如下:
import cv2 # 读取图像并显示 image = cv2.imread('ANNOTATION01_monitor.PNG') cv2.imshow('Original', image) cv2.waitKey() # 转为灰度图 grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow('Grayscale', grayscale) cv2.waitKey() # 定义目标区域坐标(替换成你实际需要的数值) x1, y1 = 50, 50 x2, y2 = 200, 200 # 提取ROI区域 roi = grayscale[y1:y2, x1:x2] # 对ROI执行阈值处理(修正原代码中未定义的after_img变量问题) ret, thresh_roi = cv2.threshold(roi, 30, 255, cv2.THRESH_BINARY) # 将处理后的ROI放回原灰度图 grayscale[y1:y2, x1:x2] = thresh_roi # 显示处理后的图像 cv2.imshow('Thresholded ROI', grayscale) cv2.waitKey() cv2.destroyAllWindows() # 最后销毁窗口释放资源
关键说明:
- 原代码中
cv2.threshold(after_img,30,255,cv2.THRESH_BINARY)里的after_img是未定义变量,已修正为针对ROI的处理逻辑 - 若要对不同区域应用不同类型的阈值处理(比如部分区域用
THRESH_BINARY,部分用THRESH_BINARY_INV),只需重复「提取ROI→处理→放回」的步骤,给每个区域设置对应的阈值参数即可
内容的提问来源于stack exchange,提问作者Mahnaz Rafia Islam
相关产品推荐
相关产品推荐

