《封号码罗》数据分析与人工智能之opencv(二)

第一部分

import numpy as np
import cv2
import time

jin1 = cv2.imread("jin1.jpg")
# jin1.shape (502, 400, 3)
# cv2.imshow("窗口名称",读进来的数组序列)
# cv2.waitKey(0)    # 等待键盘输入,单位毫秒,如果是0,无限等待
# cv2.destroyAllWindows()释放内存
# cv2.imshow("jin", jin1)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
# cv2读取图片,颜色通道是BGR      pillow读取读取图片,颜色通道是RGB

# 把一张图片变成灰色             常量-->灰色
# jins = cv2.cvtColor(jin1, code=cv2.COLOR_BGR2GRAY)
# cv2.imshow("gray", jins)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
# cv2.imwrite("jin3.jpg", jins)     # 保存图片

# 缩放图片                      宽   高
# jins = cv2.resize(jin1, dsize=(800, 1004))
# print(jins.shape)   (1004, 800, 3) 注意宽高的顺序变了
# cv2.imshow("big", jins)
# while True:
#           ord("A) 65 转化成ASCII码
#     if ord("q") == cv2.waitKey(1000):
#         break
# cv2.destroyAllWindows()

start = time.perf_counter()
end = time.perf_counter()
print(f"程序运行耗时为{(start - end).__round__(20)}")

第二部分

import numpy as np
import cv2
import time

# jin = cv2.imread("./jin1.jpg")
# jin = cv2.imread("./jin2.jpg")
jin = cv2.imread("qmx.jpg")
# 转成黑白图片,减少数据的计算量,绘制矩形时还绘制在彩色图片上面
gray = cv2.cvtColor(jin, code=cv2.COLOR_BGR2GRAY)
# cv2.imshow("cs", jin)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
# 级联分类器,给人脸特征数据,返回可以识别人脸的对象
# detector 美 [dɪˈtektər] 探测器 detect 察觉 + or 器物 → 探测器
detector = cv2.CascadeClassifier("./haarcascade_frontalface_default.xml")
#           检测对象下面的方法detectMultiScale(),返回人脸数组
# 参数       都是限制条件       左上角开始扫描图片缩放比例 默认1.1  框选数量默认 3      框选识别区域的最大最小
face_zone = detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(20, 20), maxSize=(100, 100))

# x,y是人脸的左上角 w,h是人脸的宽高
# for x, y, w, h in face_zone:
#     # 画一个正方形                                                        边线的宽度
#     cv2.rectangle(jin, pt1=(x, y), pt2=(x + w, y + h), color=[0, 255, 0], thickness=2)
#     color = np.random.randint(0, 256, size=3)  # 生成随机颜色的数组
#     cv2.circle(jin, center=(x + w // 2, y + h // 2), radius=w // 2, color=color.tolist(), thickness=2)
# cv2.imshow("jin", jin)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

# 识别视频里面的人脸
# cap = cv2.VideoCapture(0)     值为0,就会调取本地的摄像头
cap = cv2.VideoCapture("./yycyz.flv")
detector1 = cv2.CascadeClassifier("./haarcascade_frontalface_default.xml")
fps = cap.get(propId=cv2.CAP_PROP_FPS)  # 25 一秒25帧
height = cap.get(propId=cv2.CAP_PROP_FRAME_HEIGHT)  # 视频高度404.0
width = cap.get(propId=cv2.CAP_PROP_FRAME_WIDTH)  # 视频宽度720.0
# 参数一 文件保存名;参数二 视频编码格式要和文件名后缀统一;参数三 帧数;参数四 视频尺寸(整数宽高)
videoWriter = cv2.VideoWriter("./hn.mp4", cv2.VideoWriter_fourcc("M", "P", "4", "V"), 25.0,
                              (int(width), int(height)))  # 写视频的对象
while cap.isOpened():
    flag, frame = cap.read()
    gray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY)
    face_zone1 = detector1.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
    for x, y, w, h in face_zone1:
        color = np.random.randint(0, 256, size=3)
        cv2.circle(frame, center=(x + w // 2, y + h // 2), radius=w // 2, color=[0, 0, 255], thickness=2)
        if flag == False:
            break
        # if ord("q") == cv2.waitKey(40):
        elif ord("q") == cv2.waitKey(10):
            break
        else:
            cv2.imshow("yycyz", frame)
            videoWriter.write(frame)
            # pass
cv2.destroyAllWindows()  # 释放窗口
cap.release()  # 释放资源

第三部分

import numpy as np
import time

# 归一化==正则化,将数据映射到0~1之间
# 概念:假设a是矩阵中的一个元素,max/min分别是矩阵元素的最大值最小值
#       正则化后a = (a -min)/(max - min)  另外a是整个数组对象,min/max是数组中的一维数组
# 新数组完全可以代表原来比较大的数据
# 去量纲,单位去掉了
a = np.random.randint(0, 100, size=(5, 5))
v_min = a.min(axis=0)
v_max = a.max(axis=0)
re_a = (a - v_min) / (v_max - v_min)  # 归一化

# 冒泡排序法
nd = np.random.randint(0, 100, size=20)
for i in range(20):
    for j in range(i, 20):
        if nd[i] > nd[j]:
            nd[i], nd[j] = nd[j], nd[i]
            
start = time.perf_counter()
print(nd)
end = time.perf_counter()
print(f"程序运行耗时为{(start - end).__round__(20)}")

第四部分

import numpy as np
from scipy.io import wavfile
import time
import subprocess  # 可以让代码像在命令行中一样使用

# 音乐也是ndarray,是一个二维数组
yanyu, sgi1 = wavfile.read("yycyz.wav")  # 返回元组(采样频率/秒,[左,右声道数组])
pasf, sgi2 = wavfile.read("pasf.wav")  # 返回元组(采样频率/秒,[左,右声道数组])

looger = 7378812 / 44100  # 167.32/60 长度2分47秒
# wavfile.write("./yy.wav", 44100, sgi1[::3])  # 保存
# wavfile.write("./yy.wav", 44100, sgi1[:60*44100])  # 保存前一分钟的数据
# wavfile.write("./yy.wav", 44100, sgi1[:60*44100][::-1])  # 保存前一分钟的数据,倒着保存
# 拼接两首歌曲
# music = np.concatenate([sgi1[:32 * 44100], sgi2[32 * 44100:60 * 44100]])
# wavfile.write("./music.wav", 44100, music)

# https://ffmpeg.zeranoe.com/builds/ 下载ffmpeg后 bin文件夹加入系统环境变量
# https://www.jianshu.com/p/ddafe46827b7 学习地址
#            开始位置                                            截取时长,非视频中的位置
# ffmpeg -ss 00:00:06 -i yycyz.flv -acodec copy  -vcodec copy -t 00:02:46 viewo1.mp4    视频截取
# ffmpeg -i yycyz.flv -vcodec copy -an yycyz1.mp4  从视频中提取无声视频
# ffmpeg -i yycyz.mp3 -i yycyz1.mp4 out.mp4 合并音频视频并输出
# 在代码中使用命令行操作
cmd = "ffmpeg -i yycyz.flv -vcodec copy -an yycyz1.mp4 "
a = subprocess.call(cmd, shell=True)  # 成功返回 0

start = time.perf_counter()
print(a)
end = time.perf_counter()
print(f"程序运行耗时为{(start - end).__round__(20)}")

发布了30 篇原创文章 · 获赞 5 · 访问量 3323

猜你喜欢

转载自blog.csdn.net/Python_DJ/article/details/104302696
今日推荐