久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【cv2模塊 python3】

 O聽_海_軒O 2020-04-05

Python opencv模塊cv2安裝和部分函數(shù)使用

前幾天做了一下驗證碼識別,,在這里分享一下用到的opencv模塊cv2部分函數(shù)的使用方法,,也是給自己加深一下記憶。

一,、cv2模塊安裝

在這里提醒一下這里有
你如果直接用pip install cv2會報錯歐
在這里插入圖片描述
往下看解決辦法
可以通過pip install opencv-python來進行安裝

如果pip不能安裝還可以通過 https://pypi.tuna./simple/opencv-python尋找自己python對應(yīng)的 .whl文件下載進行安裝,,我這安裝的是opencv_python-3.1.0.5-cp36-cp36m-win_amd64.whl 其中cp36是我的python版本是3.6版的,自我感覺3.6版本的.whl文件還比較好找,,只是自我觀點amd64是我安裝的python是64位的

二,、cv2模塊的使用和函數(shù)介紹

1、cv2模塊的使用

檢測cv2是否安裝成功

import cv2

在這里插入圖片描述
如果不報錯就是已經(jīng)安裝成功

2,、cv2模塊的函數(shù)介紹

下面來介紹一下cv2模塊的函數(shù)介紹

(1)cv2.imread() 讀入圖片

參數(shù)1:圖片所在位置
提示:如果想顯示網(wǎng)頁上的圖片還可以寫參數(shù)1還可以寫成網(wǎng)頁的網(wǎng)址歐

import cv2

# 讀入圖像
img = cv2.imread("./2.jpg")

# 顯示圖像
cv2.imshow("bug", img)
cv2.waitKey(10)  # 單位毫秒
cv2.destroyWindow("bug")

# 復(fù)制圖像
new_img = img.copy()

# 保存圖像
cv2.imwrite("bug-new.png", new_img)
(2)cv2.VideoCapture() 讀取圖片

參數(shù)1:可以為0和1,,也可以去獲取網(wǎng)絡(luò)攝像頭的網(wǎng)址
cv2.VideoCapture(0)表示獲取電腦的攝像頭
cv2.VideoCapture(1) 表示獲取電腦外部連接的攝像頭
cv2.VideoCapture(http://192.168.0.1:8080/?action=snapshot) 表示獲取網(wǎng)絡(luò)攝像頭的視頻

import cv2

cap = cv2.VideoCapture(0)   #調(diào)整參數(shù)實現(xiàn)讀取視頻或調(diào)用攝像頭
while (cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow("cap", frame)
    if (cv2.waitKey(100) & 0xff) == ord('q'):   #在一個給定的時間內(nèi)(單位ms)等待用戶按鍵觸發(fā)
        break
cap.release()
cv2.destroyAllWindows()
(3)cv2.cvtColor() 顏色轉(zhuǎn)換

參數(shù)1:所以轉(zhuǎn)換的圖片

參數(shù)2:要轉(zhuǎn)換的模式 cv2.COLOR_BGR2GRAY:轉(zhuǎn)換為灰度圖。cv2.COLOR_BGR2HSV:轉(zhuǎn)換為HSV顏色空間,。

(4)cv2.threshold() 二值化

參數(shù)1:要灰度的圖片

參數(shù)2:閾值

參數(shù)3:最大值

參數(shù)4:轉(zhuǎn)換方式 cv2.THRESH_BINARY,、cv2.THRESH_BINARY_INV、cv2.THRESH_TRUNC,、cv2.THRESH_TOZERO,、cv2.THRESH_TOZERO_INV

(5)cv2.medianBlur() 濾波

參數(shù)1:要濾波的圖片

參數(shù)2:濾波尺寸大小

(6)cv2.boundingRect() 求包含輪廓的正方框

參數(shù)1:要計算的某一輪廓

(7)cv2.findContours() 提取圖片輪廓

參數(shù)1:要提取輪廓的圖片

參數(shù)2:提取規(guī)則,。cv2.RETR_EXTERNAL:只找外輪廓,cv2.RETR_TREE:內(nèi)外輪廓都找,。

參數(shù)3:輸出輪廓內(nèi)容格式,。cv2.CHAIN_APPROX_SIMPLE:輸出少量輪廓點。cv2.CHAIN_APPROX_NONE:輸出大量輪廓點,。

輸出參數(shù)1:提取輪廓后的圖片

輸出參數(shù)2:輪廓列表

輸出參數(shù)3:層級

下面附上我的一個驗證碼識別的代碼

# -*- coding: utf-8 -*-

import os
import cv2
import numpy as np

def split_picture(imagepath):

    # 以灰度模式讀取圖片
    gray = cv2.imread(imagepath, 0)

    # 將圖片的邊緣變?yōu)榘咨?    height, width = gray.shape
    for i in range(width):
        gray[0, i] = 255
        gray[height-1, i] = 255
    for j in range(height):
        gray[j, 0] = 255
        gray[j, width-1] = 255

    # 中值濾波
    blur = cv2.medianBlur(gray, 3) #模板大小3*3

    # 二值化
    ret,thresh1 = cv2.threshold(blur, 200, 255, cv2.THRESH_BINARY)

    # 提取單個字符
    chars_list = []
    image, contours, hierarchy = cv2.findContours(thresh1, 2, 2)
    for cnt in contours:
        # 最小的外接矩形
        x, y, w, h = cv2.boundingRect(cnt)
        if x != 0 and y != 0 and w*h >= 100:
            chars_list.append((x,y,w,h))

    sorted_chars_list = sorted(chars_list, key=lambda x:x[0])
    for i,item in enumerate(sorted_chars_list):
        x, y, w, h = item
        cv2.imwrite('test_verifycode/%d.jpg'%(i+1), thresh1[y:y+h, x:x+w])

def remove_edge_picture(imagepath):

    image = cv2.imread(imagepath, 0)
    height, width = image.shape
    corner_list = [image[0,0] < 127,
                   image[height-1, 0] < 127,
                   image[0, width-1]<127,
                   image[ height-1, width-1] < 127
                   ]
    if sum(corner_list) >= 3:
        os.remove(imagepath)

def resplit_with_parts(imagepath, parts):
    image = cv2.imread(imagepath, 0)
    os.remove(imagepath)
    height, width = image.shape

    file_name = imagepath.split('/')[-1].split(r'.')[0]
    # 將圖片重新分裂成parts部分
    step = width//parts     # 步長
    start = 0             # 起始位置
    for i in range(parts):
        cv2.imwrite('./test_verifycode/%s.jpg'%(file_name+'-'+str(i)),                     image[:, start:start+step])
        start += step

def resplit(imagepath):

    image = cv2.imread(imagepath, 0)
    height, width = image.shape

    if width >= 64:
        resplit_with_parts(imagepath, 4)
    elif width >= 48:
        resplit_with_parts(imagepath, 3)
    elif width >= 26:
        resplit_with_parts(imagepath, 2)

# rename and convert to 16*20 size
def convert(dir, file):

    imagepath = dir+'/'+file
    # 讀取圖片
    image = cv2.imread(imagepath, 0)
    # 二值化
    ret, thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
    img = cv2.resize(thresh, (16, 20), interpolation=cv2.INTER_AREA)
    # 保存圖片
    cv2.imwrite('%s/%s' % (dir, file), img)

# 讀取圖片的數(shù)據(jù),,并轉(zhuǎn)化為0-1值
def Read_Data(dir, file):

    imagepath = dir+'/'+file
    # 讀取圖片
    image = cv2.imread(imagepath, 0)
    # 二值化
    ret, thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
    # 顯示圖片
    bin_values = [1 if pixel==255 else 0 for pixel in thresh.ravel()]

    return bin_values

def predict(VerifyCodePath):

    dir = './test_verifycode'
    files = os.listdir(dir)

    # 清空原有的文件
    if files:
        for file in files:
            os.remove(dir + '/' + file)

    split_picture(VerifyCodePath)

    files = os.listdir(dir)
    if not files:
        print('查看的文件夾為空!')
    else:

        # 去除噪聲圖片
        for file in files:
            remove_edge_picture(dir + '/' + file)

        # 對黏連圖片進行重分割
        for file in os.listdir(dir):
            resplit(dir + '/' + file)

        # 將圖片統(tǒng)一調(diào)整至16*20大小
        for file in os.listdir(dir):
            convert(dir, file)

        # 圖片中的字符代表的向量
        files = sorted(os.listdir(dir), key=lambda x: x[0])
        table = np.array([Read_Data(dir, file) for file in files]).reshape(-1,20,16,1)

        # 模型保存地址
        mp = './verifycode_Keras.h5'
        # 載入模型
        from keras.models import load_model
        cnn = load_model(mp)
        # 模型預(yù)測
        y_pred = cnn.predict(table)
        predictions = np.argmax(y_pred, axis=1)

        # 標簽字典
        keys = range(31)
        vals = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'N',
                'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z']
        label_dict = dict(zip(keys, vals))

        return ''.join([label_dict[pred] for pred in predictions])

def main():

    dir = './VerifyCode/'
    correct = 0
    for i, file in enumerate(os.listdir(dir)):
        true_label = file.split('.')[0]
        VerifyCodePath = dir+file
        pred = predict(VerifyCodePath)

        if true_label == pred:
            correct += 1
        print(i+1, (true_label, pred), true_label == pred, correct)

    total = len(os.listdir(dir))
    print('\n總共圖片:%d張\n識別正確:%d張\n識別準確率:%.2f%%.'          %(total, correct, correct*100/total))

main()

如需要下載以上代碼和驗證碼可點擊下面鏈接進行下載鏈接: https://pan.baidu.com/s/18yvxdn3_sD1tIjUrf56o9Q 
如果發(fā)現(xiàn)錯誤可聯(lián)系我歐

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多