简单的预处理操作

运用opencv完成的基本的预处理操作

# -*- coding: UTF-8 -*-
import cv2
import numpy as np

def recognition(img):
    #灰度化
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    cv2.imshow('gray', gray)
    cv2.waitKey(0)

    #二值化
    ret, binary = cv2.threshold(gray, 109, 255, cv2.THRESH_BINARY)
    cv2.imshow('binary', binary)
    cv2.waitKey(0)

    
    #膨胀腐蚀操作的核函数
    element1 = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    element2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))

    #膨胀
    dilation = cv2.dilate(binary, element1, iterations=1)
    #腐蚀
    erosion = cv2.erode(dilation, element2, iterations=1)
    cv2.imshow('close', erosion)
    cv2.waitKey(0)


    #canny算子求轮廓
    canny = cv2.Canny(erosion, 100, 200)
    cv2.imshow('canny', canny)
    cv2.waitKey(0)

    #识别轮廓
    image, contours, hierarchy = cv2.findContours(canny, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

    #绘制轮廓
    cv2.drawContours(img, contours, -1, (0, 0, 255), 3)
    cv2.imshow('contours', img)
    cv2.waitKey(0)
    print('总数:' + str(len(contours)//2))  

imgpath = 'test.jpg'
img = cv2.imread(imgpath)
recognition(img)

posted @ 2017-09-14 21:29  休眠体  阅读(134)  评论(0编辑  收藏  举报