零基础入门机器视觉(九)

图像分割算法
今天只讲 一个东西 cv.grabCut()
在说明好这个玩意之前先说两个名词,前背景和后背景。简单地说前背景就是我们所拍摄得物体,后背景就是图片中不太重要得一块也就是日常生活中我们所说得‘背景’,就这么理解就行了,不必太计较。
在这里我们所要提取的是前背景。先上代码,然后再一一解释步骤和功能,原理的话自己百度,百度很清楚。(对于初学者而言,真的没必要去了解太多,拿着用就行,就像是你都已经站在巨人的肩膀上了,你还管这个巨人是怎么来的干嘛)

import matplotlib.pyplot as plt
import numpy as np
import cv2 as cv

book = cv.imread('book.jpg')
mask = np.zeros(book.shape[:2], np.uint8)
rect = (500, 600, 2900, 3000)

bgdModel = np.zeros((1,65), np.float64)
fgdModel = np.zeros((1,65), np.float64)

cv.grabCut(book.copy(), mask, rect, bgdModel, fgdModel, 10, cv.GC_INIT_WITH_RECT)
mask2 = np.where((mask == 2)|(mask == 0), 0, 1).astype('uint8')

book = book * mask2[:,:, np.newaxis]
plt.subplot(121), plt.imshow(book)
plt.title('gravcut'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(cv.cvtColor(cv.imread('book.jpg'),cv.COLOR_BGR2RGB))
plt.title('original'), plt.xticks([]), plt.yticks([])
plt.show()
# xxx = cv.rectangle(book,(500, 600),(2900,3000),(0,255,0),3)
# cv.imshow('xx',xxx)
# cv.imwrite('bookx.jpg',xxx)
cv.imwrite('book1.jpg', book)

步骤如下:
{
首先建立一个矩形rect将你需要提取的前景框出来(这个目前呢,还只能通过手动的去测距然后判断位置)
紧接着设定两个模块也就是bgdModel和fgdModel
然后调用cv.grabCut()这个函数会把原来图片中的像素点分成4个部分,背景,前景,可能是背景,可能是前景。(分别用0,1, 2, 3表示)
然后接下来把2变成0, 3变成1
这样就将前景与背景分离开了
}
让我们看看效果

我们在这里插入图片描述
我们可以看到几乎完全能够将这本书提取出来

接下来我来介绍分水岭算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值