python3+opencv
来源:互联网 发布:java无参返回值 编辑:程序博客网 时间:2024/06/17 06:45
# -*- coding: utf-8 -*-# gengzg@126.comimport sysimport cv2import numpy as npdef preprocess(gray): # # 直方图均衡化 # equ = cv2.equalizeHist(gray) # 高斯平滑 gaussian = cv2.GaussianBlur(gray, (3, 3), 0, 0, cv2.BORDER_DEFAULT) # 中值滤波 median = cv2.medianBlur(gaussian, 5) # Sobel算子,X方向求梯度 sobel = cv2.Sobel(median, cv2.CV_8U, 1, 0, ksize=3) # 二值化 ret, binary = cv2.threshold(sobel, 170, 255, cv2.THRESH_BINARY) # 膨胀和腐蚀操作的核函数 element1 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 1)) element2 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 7)) # 膨胀一次,让轮廓突出 dilation = cv2.dilate(binary, element2, iterations=1) # 腐蚀一次,去掉细节 erosion = cv2.erode(dilation, element1, iterations=1) # 再次膨胀,让轮廓明显一些 dilation2 = cv2.dilate(erosion, element2, iterations=3) cv2.imshow('dilation2', dilation2) cv2.waitKey(0) return dilation2def findPlateNumberRegion(img): region = [] # 查找轮廓 _a,contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 筛选面积小的 for i in range(len(contours)): cnt = contours[i] # 计算该轮廓的面积 area = cv2.contourArea(cnt) # 面积小的都筛选掉 if (area < 2000): continue # 轮廓近似,作用很小 epsilon = 0.001 * cv2.arcLength(cnt, True) approx = cv2.approxPolyDP(cnt, epsilon, True) # 找到最小的矩形,该矩形可能有方向 rect = cv2.minAreaRect(cnt) print ("rect is: ",rect) # box是四个点的坐标 box = cv2.boxPoints(rect) box = np.int0(box) # 计算高和宽 height = abs(box[0][1] - box[2][1]) width = abs(box[0][0] - box[2][0]) # 车牌正常情况下长高比在2.7-5之间 ratio = float(width) / float(height) print(ratio) if (ratio > 5 or ratio < 2): continue region.append(box) return regiondef detect(img): # 转化成灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 形态学变换的预处理 dilation = preprocess(gray) # 查找车牌区域 region = findPlateNumberRegion(dilation) # 用绿线画出这些找到的轮廓 for box in region: cv2.drawContours(img, [box], 0, (0, 255, 0), 2) ys = [box[0, 1], box[1, 1], box[2, 1], box[3, 1]] xs = [box[0, 0], box[1, 0], box[2, 0], box[3, 0]] ys_sorted_index = np.argsort(ys) xs_sorted_index = np.argsort(xs) x1 = box[xs_sorted_index[0], 0] x2 = box[xs_sorted_index[3], 0] y1 = box[ys_sorted_index[0], 1] y2 = box[ys_sorted_index[3], 1] img_org2 = img.copy() img_plate = img_org2[y1:y2, x1:x2] cv2.imshow('number plate', img_plate) # cv2.imwrite('number_plate.jpg', img_plate) cv2.namedWindow('img', cv2.WINDOW_NORMAL) cv2.imshow('img', img) # 带轮廓的图片 # cv2.imwrite('contours.png', img) cv2.waitKey(0) cv2.destroyAllWindows()if __name__ == '__main__': imagePath = 'c:/cp/10.jpg' img = cv2.imread(imagePath) detect(img)
import cv2from PIL import Imageimport numpy as npimage=cv2.imread('c:/1.jpg')#高斯模糊# image=cv2.GaussianBlur(image, (5,5), 1.5);# cv2.imshow('GaussianBlur',image)# cv2.waitKey(0)# cv2.destroyAllWindows()#灰度操作gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#获取长宽h, w= gray.shape[:2]#滤波去掉噪gray = cv2.blur(gray, (5,5)) # 进行滤波去掉噪声mask = np.zeros((h+2, w+2), np.uint8) #掩码长和宽都比输入图像多两个像素点,泛洪填充不会超出掩码的非零边缘cv2.floodFill(gray, mask, (w-1,h-1), (255,255,255), (2,2,2),(3,3,3),8)#定义结构元素kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))#开闭运算,先开运算去除背景噪声,再继续闭运算填充目标内的孔洞gray = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel)gray = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)ret, binary = cv2.threshold(gray,250,255,cv2.THRESH_OTSU+cv2.THRESH_BINARY)# kernel = np.ones((30,30),np.uint8)# erosion = cv2.erode(binary,kernel,iterations = 1)# dilation = cv2.dilate(erosion,kernel,iterations = 1)#找到轮廓tim,contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#计算轮廓面积for i in contours: area = cv2.contourArea(i) if area<2000 and area>600: print(area) #图像的质心,面积等 M = cv2.moments(i) print(M) #轮廓重心 cx = int(M['m10'] / M['m00']) cy = int(M['m01'] / M['m00']) print(cx,cy) #轮廓周长 perimeter = cv2.arcLength(i, True) print(perimeter)cv2.drawContours(image,contours,-1,(0,0,255),3)cv2.imshow('dilation',binary)cv2.waitKey(0)cv2.destroyAllWindows()cv2.imshow('image',image)cv2.waitKey(0)cv2.destroyAllWindows()
阅读全文
0 0
- python3+opencv
- OpenCV:Python3使用OpenCV
- Python3 安装Opencv方法
- python3 安装opencv 记录
- python3 安装opencv
- python3.6 安装opencv
- python3.6安装opencv
- python3之opencv安装
- Python3.6配置opencv
- python3 tensorflow opencv
- python3和opencv
- python3下opencv的安装
- Window10+Python3.5安装opencv
- Python3+OpenCV人脸识别
- python3 OpenCV 开发环境搭建
- windows下python3安装opencv
- Anaconda--python3.6安装openCV
- python3 + OpenCV 开发环境搭建
- 挑棍子
- Sping Boot 定时任务 修改系统时间 定时任务失效!!!
- -webkit-border-radius和-moz-border-radius
- 机器学习(8)决策树
- 2017 前端大事件和趋势回顾,2018 何去何从?
- python3+opencv
- 多线程 阻塞带返回值
- Android内存泄漏问题排查
- C++学习 多态&抽象类
- 使用 docker 安装 OpenVAS 漏洞扫描软件
- Hive的各种排序详解与代码演示
- Tensorflow+Spyder+Opencv环境搭建
- CF#450 D.Unusual Sequences
- 2017年12月14日 16:54:19