图像预处理方面
图像数据的收集阶段
GitHub数据
绝缘子数据集
这个github数据集上拥有自爆绝缘子以及完整绝缘子的图片。
优点:数据量很大,而且有对应绝缘子坐标的xml文件。
缺点:数据集普遍分辨率较低,而且可以明显的看到这些数据集是经过数据增强的,而且没有对应原图的掩模图。对于我们二次提取绝缘子的完整子串有很大的难度。
调用百度AI图像处理中的主体识别AIP+CV2 grabCut算法实现自主识别并切割出绝缘子串
在上方链接中注册好应用之后就按照新手教程的指导调用他的接口实现自主识别主体并返回对应信息,信息是存储在字典dict中,读取结果的时候要特别小心。
from aip import AipImageClassify
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
image = get_file_content(filePath)
""" 调用图像主体检测 """
client.objectDetect(image);
""" 如果有可选参数 """
options = {
}
options["with_face"] = 0
""" 带参数调用图像主体检测 """
a = client.objectDetect(image, options)##赋值的对象是client.objectDetect不是client
print(a['result'])
然后通过接口返回的数据让grabcut获得对应坐标的信息之后就可以进行主体裁切了
!!!
下方代码经由文章出处改动增加多层循环方便批量处理
!!!
下方代码并没有嵌入百度AIP,读者需要自行添加到for里面,并且改动rect的值。
import numpy as np
import cv2
from aip import AipImageClassify
import os
#鼠标事件的回调函数
def on_mouse(event,x,y,flag,param):
global rect
global leftButtonDowm
global leftButtonUp
#鼠标左键按下
if event == cv2.EVENT_LBUTTONDOWN:
rect[0] = x
rect[2] = x
rect[1] = y
rect[3] = y
leftButtonDowm = True
leftButtonUp = False
#移动鼠标事件