opencv项目实战——抠图

任务:

给定一张名为fan.jpg的图片,现要求使用 Python 结合 OpenCV 库编写代码实现以下功能:

(1)读取名为fan.jpg的图片,将尺寸设置为宽640,高480,然后逆时针旋转90度;

(2)使用Canny边缘检测提取(1)处理后的边缘;

(3)在提取边缘的基础上,查找轮廓并选取扇子的外轮廓,生成相应的掩模;

(4)通过掩模与原图进行按位与操作将对应部分提取出来,并保存为"shanzi.png"文件。

fan.jpg如下:

从任务目标看依次需要使用的方法有

1、cv2.resize() 设置尺寸

2、np.rot90() 旋转角度

3、cv2.Canny() 边缘检测

4、cv2.threshold() 阈值处理

5、cv2.findContours() 找轮廓

6、cv2.drawContours() 画轮廓

7、np.zeros() 设置掩膜尺寸

8、cv2.bitwise_and() 找到原图中对应的扇子

python 复制代码
import cv2
import numpy as np

image = cv2.imread('../data/fan.jpg')
image1 = cv2.resize(image,(480,640))
image2 = np.rot90(image1,1).copy()
image2_copy = image2.copy()
cv2.imshow('image2',image2)
cv2.waitKey(0)

image2_canny = cv2.Canny(image2,10,200)
cv2.imshow('image2_canny',image2_canny)
cv2.waitKey(0)

image3 = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY)
cv2.imshow('image3',image3)
cv2.waitKey(0)

image4 = cv2.threshold(image3,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
cv2.imshow('image4',image4)
cv2.waitKey(0)

counters = cv2.findContours(image4,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)[-2]
sortcnts = sorted(counters,key=cv2.contourArea,reverse=True)[0]
cv2.drawContours(image2_copy,sortcnts,-1,(0,0,255),3)
cv2.imshow('image_contours',image2_copy)
cv2.waitKey(0)
mask = np.zeros(image2.shape[:2],np.uint8)
cv2.drawContours(mask,[sortcnts],-1,255,-1)
cv2.imshow('mask',mask)
cv2.waitKey(0)
fan_mask = cv2.bitwise_and(image2,image2,mask=mask)
cv2.imshow('fan_mask',fan_mask)
cv2.waitKey(0)
cv2.imwrite('../data/fan_mask.png',fan_mask)
相关推荐
嵌入式老牛9 小时前
液晶段码(米/日字格)识别—倾斜校正
opencv·算法·仿射变换
故渊at17 小时前
第一板块:Android 系统基石与运行原理 | 第五篇:Context 上下文与资源配置体系
android·人工智能·opencv·context·上下文·资源配置体系
ice81303318117 小时前
【Python】调用opencv识别图片人脸位置
人工智能·python·opencv
C++ 老炮儿的技术栈1 天前
如何利用 OpenCV 将图像显示在对话框窗口上
c语言·c++·人工智能·qt·opencv·计算机视觉·github
大江东去浪淘尽千古风流人物2 天前
【OpenCV parallel_for_】并行框架源码深度解析:7种后端调度、线程池自旋等待、工作窃取与跨平台CPU Yield指令全拆解
人工智能·opencv·计算机视觉·多线程·parallel_for_·tbb
还是叫明2 天前
指针式仪表读数(机器视觉、OpenCV)
人工智能·opencv·计算机视觉
勤自省2 天前
OpenCV 30 讲学习总结:从零基础到机器人视觉
人工智能·opencv·计算机视觉·机器人
Studying 开龙wu2 天前
OpenCV 报错 Assertion failed (s >= 0) in cv::setSize 的完整解决方案
人工智能·opencv·计算机视觉
稷下元歌2 天前
aifei学习前置基础:全套完整教程:Anaconda 安装→环境配置→YOLOv8+OpenCV 安装 + OpenCV 实操 + 标注→训练→导出→部署
opencv·学习·yolo
_不会dp不改名_2 天前
python-opencv环境搭建
开发语言·python·opencv