# 2.我们需要做哪些基本的步骤：

## 2.1抠出图片中关键的人或者物

```import  cv2
import selectivesearch
import matplotlib.pyplot as  plt
import matplotlib.patches as  mpatches
import  numpy as  np

#图片识别分割
img_lbl, regions =selectivesearch.selective_search(
img, scale=500, sigma=0.9, min_size=20)

#这边的regions里面就有一个个划分出来的box
regions[0]
#Out[3]: {'labels': [0.0], 'rect': (0, 0, 619, 620), 'size': 177325},其中‘rect’定位了box的位置，‘size’确定了box的大小

# 接下来我们把窗口和图像打印出来，对它有个直观认识
fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))
ax.imshow(img)

for reg in regions:
x, y, w, h = reg['rect']
rect = mpatches.Rectangle(
(x, y), w, h, fill=False, edgecolor='red', linewidth=1)
plt.show()```

```candidates = []
for r in regions:
# 重复的不要
if r['rect'] in candidates:
continue
# 太小和太大的不要
if r['size'] < 200 or r['size']>20000:
continue

x, y, w, h = r['rect']
# 太不方的不要
if w / h > 1.8 or h / w > 1.8:
continue
candidates.append((x,y,w,h))

#剔除大box内的小box
candidates_sec = []
for  i  in  candidates:
if len(candidates_sec)==0:
candidates_sec.append(i)
else:
Flag=False
replace=-1
index=0
for j  in candidates_sec:
##新box在小圈 则删除
if i[0]>=j[0] and i[0]+i[2]<=j[0]+j[2]  and i[1]>=j[1] and i[1]+i[3]<=j[1]+j[3]:
Flag=True
break
##新box不在小圈 而在老box外部 替换老box
elif i[0]<=j[0] and i[0]+i[2]>=j[0]+j[2] and i[1]<=j[1] and i[1]+i[3]>=j[1]+j[3]:
replace=index
break
index+=1

if not Flag:
if replace>=0:
candidates_sec[replace]=i
else:
candidates_sec.append(i)```

```fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))
ax.imshow(img)
for x, y, w, h in candidates_sec:
rect = mpatches.Rectangle(
(x, y), w, h, fill=False, edgecolor='red', linewidth=1)
plt.show()```

## 2.2相关理论概述：

### 2.2.1 抠若干个box过程：

```def sim_fill(r1, r2, imsize):
"""
calculate the fill_similarity over the image
"""
bbsize = (
(max(r1["max_x"], r2["max_x"]) - min(r1["min_x"], r2["min_x"]))
* (max(r1["max_y"], r2["max_y"]) - min(r1["min_y"], r2["min_y"]))
)
return 1.0 - (bbsize - r1["size"] - r2["size"]) / imsize```

0 条评论

• ### 理论：因子分析原理剖析

F1,F2,F3...为前m个因子包含数据总量（累计贡献率）不低于80%。可取前m各因子来反映原评价

• ### 设计师必须了解的美术基础

任何分类的设计师都需要有一定的美术基础，甚至也要有一定的手绘能力。我们在用电脑设计图形的时候其实也在潜移默化地在使用我们储存在大脑中的美术知识和审美，即使再先进...

• ### scala打包jar并在Linux下运行

切记这里还有一个位置是存放打包完成后的 jar 存放位置 Output Directory ：

• ### 【许晓笛】49行代码就能发币？而且EOS连例子都给你了

Daniel Larimer 在他的博客介绍了EOS新的智能合约架构（EOS团队的开发速度实在是太吓人，根本追不上）。他给出了最简单的一个新币种的智能合约代码，...

• ### 【许晓笛】49行代码就能发币？而且EOS连例子都给你了

Daniel Larimer 在他的博客介绍了EOS新的智能合约架构（EOS团队的开发速度实在是太吓人，根本追不上）。他给出了最简单的一个新币种的智能合约代码，...

• ### 美翻你的朋友圈，Python生成蒙太奇马赛克图片

我们有时候会听到这么一个词--“蒙太奇”，但却不知道这个词是什么意思。蒙太奇原为建筑学术语，意为构成、装配。而后又延伸为一种剪辑理论：当不同镜头拼接在一起时，往...

• ### 澳大利亚基于人工智能的众包快递公司Go People获300万美元融资

【数据猿导读】 近日，澳大利亚悉尼按需众包快递公司Go People宣布已获得新一轮300万美元融资，因为电子商务巨头亚马逊（Amazon）在澳大利亚的扩张极大...

• ### Struts2+Spring+Hibernate学习总结——XML才是王道

前面几篇分别总结了Struts、Hibernate、Spring的学习（见《Struts2学习总结以及细枝末节》、《Hibernate学习总结》、...