如何用OpenCV保留椭圆区域内容并将外部转为白色像素?
实现椭圆外部转为白色的解决方案
要达成「仅保留椭圆内部区域,外部转为白色」的反向效果,可通过遮罩+图像组合的方式实现,修改后的代码如下:
import cv2 import numpy as np # 原阈值化步骤 _, threshold_eye = cv2.threshold(eye, 80, 255, cv2.THRESH_BINARY) frameHeight, frameWidth = threshold_eye.shape # 1. 创建与图像同尺寸的全白遮罩 mask = np.full((frameHeight, frameWidth), 255, dtype=np.uint8) # 2. 在遮罩上绘制黑色填充椭圆(椭圆区域为黑色,外部保持白色) cv2.ellipse(mask, (int(frameWidth/2), int(frameHeight/2)), # 椭圆中心 (int(frameWidth/2), int(frameHeight/2)), # 椭圆半轴长(适配图像尺寸) 0, 0, 360, # 旋转角度与绘制范围 0, # 椭圆颜色设为黑色 -1) # 填充椭圆内部 # 3. 组合图像:椭圆内保留原阈值化内容,外部转为白色 # 方法一:直接赋值替换 result = np.full_like(threshold_eye, 255) result[mask == 0] = threshold_eye[mask == 0] # 方法二:位运算实现(效果相同) # result = cv2.bitwise_or(threshold_eye, mask)
效果说明
- 处理前:阈值化后的眼睛图像,黑色区域对应眼睛特征,其余为白色背景
- 处理后:仅椭圆范围内保留原阈值化的眼睛特征,椭圆外部区域全部变为白色
内容的提问来源于stack exchange,提问作者ortunoa
相关产品推荐
相关产品推荐

