当且仅当您具有相同的图像条件(背景和笔记本电脑)时,一种天真的第一种方法才能奏效。
- 将图像转换为 HSV(检查 HSV 中的图像
屏幕是图像中唯一具有高饱和度、值的部分
值)
- 通过对饱和度和值通道进行硬阈值化来创建蒙版
- 扩张蒙版以连接断开的区域
- 计算凸包以获得掩码边界
查看快速结果:
这是与原始图像部分相同的蒙版,可以通过蒙版:
这是执行此操作的代码:
img = imread( 'imagename.jpg'); % change the image name
hsv = rgb2hsv( img);
mask = hsv(:,:,2)>0.25 & hsv(:,:,3)>0.5;
strel_size = round(0.025*max(size(mask)));
dilated_mask=imdilate(mask,strel('square',strel_size));
s=regionprops(dilated_mask,'BoundingBox','ConvexHull');
% here Bounding box produces a box with the minimum-maximum white pixel positions but the image is not actually rectangular due to perspective...
imshow(uint8(img.*repmat(dilated_mask,[1 1 3])));
line(s.ConvexHull(:,1),s.ConvexHull(:,2),'Color','red','LineWidth',3);
当然,您可以应用一些更复杂的处理来更准确,并将凸包校正为具有透视的矩形形状,但这只是展示该方法的 5 分钟尝试......