21 直线检测

import cv2 as cv
import numpy as npdef line_detection(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)edges = cv.Canny(gray, 50, 150, apertureSize=3)lines = cv.HoughLines(edges, 1, np.pi/180, 200)#半径步长为1,每次偏转1度,直线最小长度200for line in lines:#print(type(lines))rho, theta = line[0]a = np.cos(theta)b = np.sin(theta)x0 = a * rhoy0 = b * rhox1 = int(x0+1000*(-b))y1 = int(y0+1000*(a))x2 = int(x0-1000*(-b))y2 = int(y0-1000*(a))cv.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)cv.imshow("line_detection", image)def line_detect_possible_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)edges = cv.Canny(gray, 50, 150, apertureSize=3)lines = cv.HoughLinesP(edges, 1, np.pi/180, 100, minLineLength=100, maxLineGap=15)for line in lines:#print(type(line))x1, y1, x2, y2 = line[0]cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)cv.imshow("line_detect_possible_demo", image)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/fangge.png")
src1=src.copy()
src2=src.copy()cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)line_detection(src1)
line_detect_possible_demo(src2)
cv.waitKey(0)cv.destroyAllWindows()

22 圆检测

import cv2 as cv
import numpy as npdef detect_circles_demo(image):dst = cv.pyrMeanShiftFiltering(image, 10, 100)cimage = cv.cvtColor(dst, cv.COLOR_BGR2GRAY)circles = cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)#步长为1,最小圆心距20circles = np.uint16(np.around(circles))for i in circles[0, :]:cv.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2)#圆圈cv.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2)#圆心cv.imshow("circles", image)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/coins_001.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
detect_circles_demo(src)
cv.waitKey(0)cv.destroyAllWindows()

23 轮廓发现

import cv2 as cv
import numpy as npdef edge_demo(image):blurred = cv.GaussianBlur(image, (3, 3), 0)gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)edge_output = cv.Canny(gray, 30, 100)cv.imshow("Canny Edge", edge_output)return edge_outputdef edge_contours_demo(image):binary = edge_demo(image)cv.imshow("canny binary", binary)cloneImage, contours, heriachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)for i, contour in enumerate(contours):cv.drawContours(image, contours, i, (0, 0, 255), 2)#最后一个参数为-1时表示填充approxCurve = cv.approxPolyDP(contour, 4, True)if approxCurve.shape[0] > 6:cv.drawContours(image, contours, i, (255, 0, 0), 2)if approxCurve.shape[0] == 4:cv.drawContours(image, contours, i, (0, 255, 0), 2)#print(approxCurve.shape[0])#print(i)cv.imshow("edge detect contours", image)def contours_demo(image):dst = cv.GaussianBlur(image, (3, 3), 0)gray = cv.cvtColor(dst, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)cv.imshow("binary image", binary)# binary = edge_demo(image)cloneImage, contours, heriachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)for i, contour in enumerate(contours):cv.drawContours(image, contours, i, (0, 0, 255), 2)#最后一个参数为-1时表示填充approxCurve = cv.approxPolyDP(contour, 4, True)if approxCurve.shape[0] > 6:cv.drawContours(image, contours, i, (255, 0, 0), 2)if approxCurve.shape[0] == 4:cv.drawContours(image, contours, i, (0, 255, 0), 2)#print(approxCurve.shape[0])#print(i)cv.imshow("detect contours", image)print("--------- Python OpenCV Tutorial ---------")
#src = cv.imread("D:/vcprojects/images/coins_001.jpg")
src = cv.imread("D:/vcprojects/images/blob1.png")cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
src1=src.copy()
src2=src.copy()contours_demo(src1)
edge_contours_demo(src2)cv.waitKey(0)cv.destroyAllWindows()

24 对象检测

import cv2 as cv
import numpy as npdef measure_object(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)print("threshold value : %s"%ret)cv.imshow("binary image", binary)dst = cv.cvtColor(binary, cv.COLOR_GRAY2BGR)outImage, contours, hireachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)print("--------------------------------")for i, contour in enumerate(contours):area = cv.contourArea(contour)#轮廓面积x, y, w, h = cv.boundingRect(contour)#外接矩形rate = min(w, h)/max(w, h)#宽高比print("rectangle rate : %s"%rate)mm = cv.moments(contour)#计算图像中的中心矩#print(type(mm))#重心坐标xc,yccx = mm['m10']/mm['m00']cy = mm['m01']/mm['m00']cv.circle(dst, (np.int(cx), np.int(cy)), 3, (0, 255, 255), -1)cv.rectangle(dst, (x, y), (x+w, y+h), (0, 0, 255), 2)print("contour area :%s"%area)print("--------------------------------")cv.drawContours(image, contours, i, (0, 255, 0), 2)cv.imshow("measure-contours", image)def measure_object1(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)print("threshold value : %s"%ret)cv.imshow("binary image1", binary)dst = cv.cvtColor(binary, cv.COLOR_GRAY2BGR)outImage, contours, hireachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)print("--------------------------------")for i, contour in enumerate(contours):area = cv.contourArea(contour)#轮廓面积x, y, w, h = cv.boundingRect(contour)#外接矩形rate = min(w, h)/max(w, h)#宽高比print("rectangle rate : %s"%rate)mm = cv.moments(contour)#计算图像中的中心矩#print(type(mm))#重心坐标xc,yccx = mm['m10']/mm['m00']cy = mm['m01']/mm['m00']cv.circle(dst, (np.int(cx), np.int(cy)), 3, (0, 255, 255), -1)cv.rectangle(dst, (x, y), (x+w, y+h), (0, 0, 255), 2)print("contour area :%s"%area)print("--------------------------------")approxCurve = cv.approxPolyDP(contour, 4, True)#print(approxCurve.shape)if approxCurve.shape[0] > 6:#圆cv.drawContours(image, contours, i, (0, 255, 0), 2)if approxCurve.shape[0] == 4:cv.drawContours(image, contours, i, (0, 0, 255), 2)if approxCurve.shape[0] == 3:#三角形cv.drawContours(image, contours, i, (255, 0, 0), 2)cv.imshow("measure-contours1", image)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/digitss.png")
src1 = cv.imread("D:/vcprojects/images/blob1.png")cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
cv.imshow("input image1", src1)
src2=src.copy()
src3=src1.copy()measure_object(src2)
measure_object1(src3)
cv.waitKey(0)cv.destroyAllWindows()
--------- Python OpenCV Tutorial ---------
threshold value : 90.0
--------------------------------
rectangle rate : 0.9764705882352941
contour area :5344.0
--------------------------------
rectangle rate : 0.7325581395348837
contour area :1326.5
--------------------------------
rectangle rate : 0.8571428571428571
contour area :1819.0
--------------------------------
rectangle rate : 0.2441860465116279
contour area :646.0
--------------------------------
rectangle rate : 0.7294117647058823
contour area :1314.5
--------------------------------
rectangle rate : 0.5476190476190477
contour area :2696.0
--------------------------------
rectangle rate : 0.49
contour area :2282.5
--------------------------------
rectangle rate : 0.5824175824175825
contour area :1402.0
--------------------------------
threshold value : 54.0
--------------------------------
rectangle rate : 0.2129032258064516
contour area :4928.0
--------------------------------
rectangle rate : 0.15163934426229508
contour area :8746.0
--------------------------------
rectangle rate : 0.6825396825396826
contour area :12471.5
--------------------------------
rectangle rate : 0.972972972972973
contour area :977.0
--------------------------------
rectangle rate : 1.0
contour area :1425.5
--------------------------------
rectangle rate : 0.975609756097561
contour area :1227.0
--------------------------------
rectangle rate : 0.975609756097561
contour area :11372.0
--------------------------------
rectangle rate : 0.9111111111111111
contour area :7202.5
--------------------------------
rectangle rate : 0.21962616822429906
contour area :9797.0
--------------------------------
rectangle rate : 0.17972350230414746
contour area :6580.5
--------------------------------

25 膨胀与腐蚀

import cv2 as cv
import numpy as npdef erode_demo(image):#腐蚀#print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))#结构元素为矩形dst = cv.erode(binary, kernel)#腐蚀cv.imshow("erode_demo", dst)def dilate_demo(image):#膨胀#print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))dst = cv.dilate(binary, kernel)cv.imshow("dilate_demo", dst)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/5.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
src1=src.copy()
src2=src.copy()erode_demo(src1)
dilate_demo(src2)cv.waitKey(0)cv.destroyAllWindows()

import cv2 as cv
import numpy as npdef erode_demo(image):#腐蚀#print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))#结构元素为矩形dst = cv.erode(binary, kernel)#腐蚀cv.imshow("erode_demo", dst)def dilate_demo(image):#膨胀#print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))dst = cv.dilate(binary, kernel)cv.imshow("dilate_demo", dst)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/bin2.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
src1=src.copy()
src2=src.copy()erode_demo(src1)
dilate_demo(src2)# kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
# dst = cv.erode(src, kernel)
# cv.imshow("result", dst)
cv.waitKey(0)cv.destroyAllWindows()

26 开闭操作

import cv2 as cv
import numpy as npdef open_demo(image):#开操作=腐蚀+膨胀  去外边白点print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (15, 15))binary = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)cv.imshow("open-result", binary)def close_demo(image):#闭操作=膨胀+腐蚀 填充里边黑点print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))binary = cv.morphologyEx(binary, cv.MORPH_CLOSE, kernel)cv.imshow("close_demo", binary)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/bin2.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
open_demo(src)
close_demo(src)cv.waitKey(0)cv.destroyAllWindows()

import cv2 as cv
import numpy as npdef open_shuiping_demo(image):#开操作=腐蚀+膨胀  去外边白点 填充里边黑点,提取水平或垂直线print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 1))#提取水平线binary = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)cv.imshow("open_shuiping_demo", binary)def open_shuzhi_demo(image):#开操作=腐蚀+膨胀  去外边白点 填充里边黑点,提取水平或垂直线print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_RECT, (1, 15))#提取垂直线binary = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)cv.imshow("open_shuzhi_demo", binary)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/morph01.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
open_shuiping_demo(src)
open_shuzhi_demo(src)cv.waitKey(0)cv.destroyAllWindows()

import cv2 as cv
import numpy as npdef open_demo(image):#开操作=腐蚀+膨胀  去外边白点 填充里边黑点,提取水平或垂直线print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_RECT, (4,4))binary = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)cv.imshow("open__demo", binary)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/abcd.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
open_demo(src)cv.waitKey(0)cv.destroyAllWindows()

import cv2 as cv
import numpy as npdef open_demo(image):#开操作=腐蚀+膨胀  去外边白点 填充里边黑点,提取水平或垂直线print(image.shape)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)cv.imshow("binary", binary)kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (5, 5))binary = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)cv.imshow("open__demo", binary)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/zhifang_ball.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
open_demo(src)cv.waitKey(0)cv.destroyAllWindows()

27 其它形态学操作

import cv2 as cv
import numpy as npdef tophat_demo(image):#顶帽=原图-开操作(腐蚀+膨胀)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))dst = cv.morphologyEx(gray, cv.MORPH_TOPHAT, kernel)#增加亮度cimage = np.array(gray.shape, np.uint8)cimage = 100dst = cv.add(dst, cimage)cv.imshow("tophat", dst)def blackhat_demo(image):#黑帽=闭操作(膨胀+腐蚀)-原图gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))dst = cv.morphologyEx(gray, cv.MORPH_BLACKHAT, kernel)#增加亮度cimage = np.array(gray.shape, np.uint8)cimage = 100dst = cv.add(dst, cimage)cv.imshow("blackhat", dst)def tophat_binary_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))dst = cv.morphologyEx(binary, cv.MORPH_TOPHAT, kernel)cv.imshow("tophat binary", dst)def blackhat_binary_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))dst = cv.morphologyEx(binary, cv.MORPH_BLACKHAT, kernel)cv.imshow("blackhat binary", dst)def base_gradient_demo(image):#基本梯度=膨胀-腐蚀gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))dst = cv.morphologyEx(binary, cv.MORPH_GRADIENT, kernel)cv.imshow("base gradient", dst)def gradient2_demo(image):kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))pengzhang = cv.dilate(image, kernel)fushi = cv.erode(image, kernel)dst1 = cv.subtract(image, fushi) # 内部梯度=原图-腐蚀dst2 = cv.subtract(pengzhang, image) # 外部梯度=膨胀-原图cv.imshow("internal gradient", dst1)cv.imshow("external gradient", dst2)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/bin2.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)tophat_demo(src)
blackhat_demo(src)tophat_binary_demo(src)
blackhat_binary_demo(src)base_gradient_demo(src)
gradient2_demo(src)cv.waitKey(0)
cv.destroyAllWindows()

28 分水岭算法

import cv2 as cv
import numpy as npdef watershed_demo():# remove noise if any 去噪#print(src.shape)blurred = cv.pyrMeanShiftFiltering(src, 10, 100)# gray\binary image 灰度、二值化gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)cv.imshow("binary-image", binary)# morphology operation 形态学操作kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))mb = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel, iterations=2)#2次开操作sure_bg = cv.dilate(mb, kernel, iterations=3)#3次膨胀cv.imshow("mor-opt", sure_bg)# distance transform 距离变换dist = cv.distanceTransform(mb, cv.DIST_L2, 3)dist_output = cv.normalize(dist, 0, 1.0, cv.NORM_MINMAX)cv.imshow("distance-t", dist_output*50)ret, surface = cv.threshold(dist, dist.max()*0.6, 255, cv.THRESH_BINARY)surface_fg = np.uint8(surface)cv.imshow("surface-bin", surface_fg)unknown = cv.subtract(sure_bg, surface_fg)#未知区域,种子以外的区域ret, markers = cv.connectedComponents(surface_fg)# watershed transform 分水岭变换markers = markers + 1markers[unknown==255] = 0markers = cv.watershed(src, markers=markers)src[markers==-1] = [0, 0, 255]cv.imshow("result", src)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/coins_001.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
watershed_demo()
cv.waitKey(0)cv.destroyAllWindows()

29 人脸检测

import cv2 as cv
import numpy as npdef face_detect_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)face_detector = cv.CascadeClassifier("D:/opencv342/data/haarcascades/haarcascade_frontalface_alt_tree.xml")#face_detector = cv.CascadeClassifier("D:/opencv342/data/lbpcascades/lbpcascade_frontalcatface.xml")#下载地址:https://github.com/opencv/opencvfaces = face_detector.detectMultiScale(gray, 1.02, 4)for x, y, w, h in faces:cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)cv.imshow("result", image)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)face_detect_demo(src)cv.waitKey(0)
cv.destroyAllWindows()

import cv2 as cv
import numpy as npdef face_detect_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)face_detector = cv.CascadeClassifier("D:/opencv342/data/haarcascades/haarcascade_frontalface_alt_tree.xml")#face_detector = cv.CascadeClassifier("D:/opencv342/data/lbpcascades/lbpcascade_frontalcatface.xml")#下载地址:https://github.com/opencv/opencvfaces = face_detector.detectMultiScale(gray, 1.1, 2)for x, y, w, h in faces:cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)cv.imshow("result", image)print("--------- Python OpenCV Tutorial ---------")
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
capture = cv.VideoCapture(0)while(True):ret, frame = capture.read()frame = cv.flip(frame, 1)#左右变换face_detect_demo(frame)c = cv.waitKey(10)if c == 27: # ESCbreakcv.waitKey(0)
cv.destroyAllWindows()

30 案例—数字验证码识别

import cv2 as cv
import numpy as np
from PIL import Image
import pytesseract as tess#pip install opencv-python
#pip intsall opencv-contrib-python
#pip install pytesseract# https://blog.csdn.net/duanshao/article/details/79514051
# https://blog.csdn.net/wang_hugh/article/details/80760940def recognize_text():gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)ret, open_out = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)cv.imshow("binary-image", open_out)cv.bitwise_not(open_out, open_out)textImage = Image.fromarray(open_out)text = tess.image_to_string(textImage)print("识别结果: %s"%text)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/74162.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
recognize_text()
cv.waitKey(0)cv.destroyAllWindows()

--------- Python OpenCV Tutorial ---------
识别结果: 74162

import cv2 as cv
import numpy as np
from PIL import Image
import pytesseract as tess#pip install opencv-python
#pip intsall opencv-contrib-python
#pip install pytesseract# https://blog.csdn.net/duanshao/article/details/79514051
# https://blog.csdn.net/wang_hugh/article/details/80760940def recognize_text():gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)ret, open_out = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)cv.imshow("binary-image", open_out)cv.bitwise_not(open_out, open_out)textImage = Image.fromarray(open_out)text = tess.image_to_string(textImage)print("识别结果: %s"%text)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/yzm1.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
recognize_text()
cv.waitKey(0)cv.destroyAllWindows()

--------- Python OpenCV Tutorial ---------
识别结果: KD Q U

import cv2 as cv
import numpy as np
from PIL import Image
import pytesseract as tess#pip install opencv-python
#pip intsall opencv-contrib-python
#pip install pytesseract# https://blog.csdn.net/duanshao/article/details/79514051
# https://blog.csdn.net/wang_hugh/article/details/80760940def recognize_text():gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)#cv.imshow("bin", binary)kernel = cv.getStructuringElement(cv.MORPH_RECT, (1,2))bin1 = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)#cv.imshow("bin1", bin1)kernel1 = cv.getStructuringElement(cv.MORPH_RECT, (2,1))open_out = cv.morphologyEx(bin1, cv.MORPH_OPEN, kernel1)cv.imshow("binary", open_out)cv.bitwise_not(open_out, open_out)textImage = Image.fromarray(open_out)text = tess.image_to_string(textImage)print("识别结果: %s"%text)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/8a62n1.png")
#src = cv.imread("D:/vcprojects/images/e3fy.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
recognize_text()
cv.waitKey(0)cv.destroyAllWindows()

--------- Python OpenCV Tutorial ---------
识别结果: &AG2NL

Python+OpenCV3.3图像处理视频教程 贾志刚 代码笔记3相关推荐

  1. Python+OpenCV3.3图像处理视频教程 贾志刚 代码笔记1

    2 图像加载与保存 import cv2 as cv import numpy as npdef video_demo():capture = cv.VideoCapture(0)while(True ...

  2. Python+OpenCV3.3图像处理视频教程 贾志刚 代码笔记2

    11 边缘保留滤波(EPF) import cv2 as cv import numpy as npdef bi_demo(image):dst = cv.bilateralFilter(image, ...

  3. Python+OpenCV3.3图像处理视频教程 贾志刚1

    1.概述与环境搭建 pip install opencv-pythonpip install opencv-contrib-pythonpip install pytesseract 测试: impo ...

  4. 2018年最新Spring Boot视频教程附代码笔记资料(50G)

    1. Spring Boot  项目实战 ----- 技术栈博客企业前后端 链接:https://pan.baidu.com/s/1hueViq4 密码:4ma8 2.Spring Boot  项目实 ...

  5. 2018尚硅谷SpringBoot视频教程附代码+笔记+课件(内含Docker)

    尚硅谷SpringBoot视频教程(内含Docker)附代码+笔记+课件 下载地址:百度网盘

  6. 【python OpenCV3.3 图像处理教程:直线检测、圆检测、对象测量、腐蚀、膨胀等形态学操作、数字验证码识别、人脸检测

    1. 直线检测 Hough Line Transform:前提:边缘检测已经完成,基于霍夫变换 1.1 原理 可以通过(theta,r)唯一表示一个点. 把过三个点的全部直线以某一角度全部计算出来,如 ...

  7. 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...

  8. python structure_GitHub - CYZYZG/Data_Structure_with_Python: 这是我在学习《基于Python的数据结构》的时候的笔记与代码...

    Data_Structure_with_Python 这是我在学习<基于Python的数据结构>的时候的笔记与代码 主要参考:数据结构与算法(Python) 对于算法的时间效率,我们可以用 ...

  9. 学完可以解决90%以上的数据分析问题-利用python进行数据分析第二版(代码和中文笔记)...

    <利用python进行数据分析>是数据分析的基础教程,绝大部分数据分析师的入门教材,目前已经升级到第二版.本站搜集了教材的第二版原版代码进行中文翻译和注释,并做了一定的笔记.基本上只需要看 ...

最新文章

  1. Redis AOF带来的问题
  2. C# 解决串口接收数据不完整
  3. git提取和拉取的区别_git fetch和git pull的区别
  4. 数据结构——括号匹配问题
  5. linux reboot命 过程,IDRAC安装dell服务器操作系统(linux or windows),用到生命周期管理器...
  6. php正则表达式 匹配数字,正则表达式之匹配数字范围
  7. count数据库优化oracle,迷惑性SQL性能问题排查与优化
  8. Pandas Index 属性
  9. 语言 OJ 高低位逆转_用于检测污水井内水位高低的报警器--液位开关
  10. CUDA算法:MS-queue算法相关
  11. 潜在语义分析(TF-IDF、LSA)
  12. 安装centos7.3操作系统
  13. 文本聚类python fcm_模糊C均值聚类-FCM算法
  14. Linux命令: 在线练习网址
  15. Python 读取文件夹下的Excel文件导入到数据库
  16. python画rgb渐变色_请问如何在matplotlib中画出自定义渐变色?
  17. Google Chrome浏览器调整分辨率的插件
  18. usaco1.3 calfflac 2008.11.5
  19. 逼近理想解法TOPSIS(python程序)
  20. 基于Python操作Word

热门文章

  1. 智工运维定位器技术方案及选型
  2. GCJ经纬度(腾讯、高德)转WGS84经纬度EXCEL算法
  3. WinCE7.0 下 Silverlight(XAML) 类型的应用启动逻辑
  4. 电工基础知识计算机题库,南方电网计算机类笔试题库_国家电网计算机考试(22)_电工基础知识_电工技术-电工最常见电路...
  5. 编译原理 第十章 代码优化
  6. OUC-SE-GROUP09-BLOG1
  7. 一分钟攻破ADSL 盗遍宽带密码(转)
  8. BUUCTF:[SUCTF 2019]Game
  9. windows 2008 R2 64位系统杀毒软件
  10. 服务器稳定性和可靠性区别,在服务器、软件里面,稳定性和可靠性有什么区别?...