图像处理与分析 -- 期末大作业

一、参考文章

1. 方法发想

(1) 掩膜进行位运算
(2) 使用 grabcut
(3) 边缘提取
(4) 轮廓检测 + 填充法
(5) 使用 HSV 颜色空间颜色区域提取的方法,提取出前景或者背景
Python 提取前景 - 单一颜色背景
python-opencv 边缘清洗法提取图片轮廓和前景内容

2. 掩膜进行位运算

1
2
3
4
5
6
7
8
9
10
11
# 读取图像
img_src = cv2.imread ("test.png")
img_gray = cv2.cvtColor (img_src, cv2.COLOR_BGR2GRAY)
# 灰度处理
ret, img_bin = cv2.threshold (img_gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours (img_bin, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 制作掩膜
img_mask = np.zeros (img_src.shape, np.uint8)
cv2.drawContours (img_mask, contours, -1, (255, 255, 255), -1)
# 位与运算
img_result = cv2.bitwise_and (img_src, img_mask)
(1) cv2.threshold () 函数

ret, dst = cv2.threshold (src, thresh, maxval, type)
ret: True 或 False,代表有没有读到图片
dst: 目标图像
src 是灰度图像
thresh 是起始阈值
maxval 是最大值
type 是定义如何处理数据与阈值的关系

threshold 函数的使用
CV2 简单阈值函数:cv2.threshold ()
Python 下 opencv 使用笔记(四)(图像的阈值处理)

(2) cv2.adaptivthreshold () 函数
(3) cv2.findContours () 函数

OpenCV 之颜色空间转换:cvtColor () 函数
opencv 学习(十六)之颜色空间转换 cvtColor ()
python-opencv2 利用 cv2.findContours () 函数来查找检测物体的轮廓
void cvtColor (InputArray src, OutputArray dst, int code, int dstCn=0)
OpenCV2 的 CV_前缀的宏命名规范,被 OpenCV3 中 COLOR_式的宏命名前缀所取代,另外,需要提醒的是 OpenCV 默认的图片通道存储顺序是 BGR, 而不是 RGB

(4) cv2.drawContours () 函数

cv2.drawContours (img_mask, contours, -1, (255, 255, 255), -1)
其中第一个参数 image 表示目标图像,
第二个参数 contours 表示输入的轮廓组,每一组轮廓由点 vector 构成,
第三个参数 contourIdx 指明画第几个轮廓,如果该参数为负值,则画全部轮廓,
第四个参数 color 为轮廓的颜色,
第五个参数 thickness 为轮廓的线宽,如果为负值或 CV_FILLED 表示填充轮廓内部,

(5) 小知识点

1
2
3
s = 'one two one two one'
print (s.replace (' ', '-'))
# one-two-one-two-one

在 Python 中的常见的几种字符串替换操作

numpy 库数组属性查看:类型、尺寸、形状、维度

1
2
3
import numpy as np
a1 = np.array ([1,2,3,4],dtype=np.complex128)
print (" 数组的维度数目 ",a1.ndim)

3.matlab

1

4.image matting

python 之 parser.add_argument () 用法 —— 命令行选项、参数和子命令解析器