(一)OpenCV入门,代码练习,详细注释【人脸检测】【100行】【原创】

文章目录


文字

需要IDE/notebook不适合直接运行代码/面向对象/pycharm专门做python
整理下安装opencv思路/首先我的是Anaconda3官网下载的python3.7/当然也可以在python官网下载python(版本很多/根据需要选择)
先说安装思路/再说步骤/如果你在python官网下载那就利用cmd窗口进行配置文件**(主要就是导入opencv-python和opencv-contrib-python包)
下面来说说这两个包/截至2019/10/17已知最新版为4.1.1.26/然后两个包必须是同版本对应(2022年4月1日注:好像不是同版本也行?很久之前,不记得了)/如果你在python官网下载python导入包/必须采用去一个网站下载opencv_python-4.1.2+contrib-cp37-cp37m-win_amd64.whl/为.whl后缀文件/然后配置电脑环境变量/在控制面版path里 然后cmd窗口里进行pip操作安装导入两个文件/好像是这样总结python+pycharm(IDE) 。。。(2022年4月1日注:python是解释器,pycharm是编辑器,两者结合使用)
我的方式是Anaconda3+pycharm/因为我是直接在Anaconda3官网下载的python3.7(目前只有2.7和3.7)(2022年4月1日注:目前是指2019年)/所以这个python自带了很多opencv
文件,直接在Anaconda Prompt(Anaconda3)类似cmd黑窗口里直接pip配置导入两个文件/就酱/然后pycharm是IDE 。。。
目前我已降级/3.4.3.18滑稽/pip list查看python导入的所有包也就是.whl文件/必须要在Scripts里才能安装 “”"
opencv=计算机开源视觉库=很多库函数/如何运行?=anaconda3软件(也可以是其它软件,用的多的是这个anaconda3)+python软件(一种是anaconda3官网下载的python,另一种是pytohn官网下的python)

代码

"""
需要IDE/notebook不适合直接运行代码/面向对象/pycharm专门做python
整理下安装opencv思路/首先我的是Anaconda3官网下载的python3.7/当然也可以在python官网下载python(版本很多/根据需要选择)
先说安装思路/再说步骤/如果你在python官网下载那就利用cmd窗口进行配置文件(主要就是导入opencv-python和opencv-contrib-python包)
下面来说说这两个包/截至2019/10/17已知最新版为4.1.1.26/然后两个包必须是同版本对应/如果你在python官网下载python导入包/必须
采用去一个网站下载opencv_python-4.1.2+contrib-cp37-cp37m-win_amd64.whl/为.whl后缀文件/然后配置电脑环境变量/在控制面版path里
然后cmd窗口里进行pip操作安装导入两个文件/好像是这样总结python+pycharm(IDE)
。。。
我的方式是Anaconda3+pycharm/因为我是直接在Anaconda3官网下载的python3.7(目前只有2.7和3.7)/所以这个python自带了很多opencv
文件,直接在Anaconda Prompt (Anaconda3)类似cmd黑窗口里直接pip配置导入两个文件/就酱/然后pycharm是IDE
。。。
目前我已降级/3.4.3.18滑稽/pip list查看python导入的所有包也就是.whl文件/必须要在Scripts里才能安装
"""
# opencv=计算机开源视觉库=很多库函数/如何运行?=anaconda3软件(也可以是其它软件,用的多的是这个anaconda3)
# +python软件(一种是anaconda3官网下载的python,另一种是pytohn官网下的python)

# 0就是黑色/255是白色/黑白图就是灰度图只有一个通道/
# 默认读取BGR通道格式
import cv2 #opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np #numpy是数组
#%matplotlib inline # 这个魔法指令pycharm中用不到/只能noteboook中使用

img=cv2.imread('E:/jupyter-notebook/notebook1/cat.jpg')
cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# img.shape(h,w,c)c是RGB/opencv读取是BGR
# img=cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE)# 灰度图/单通道/此时没有c
# cv2.imwrite('mycat.png',img)# 保存图片/mycat.png为名字

#"""
# 检查是否打开正确
vc = cv2.VideoCapture('E:/jupyter-notebook/notebook1/test.mp4')# 读取mp4/test.mp4/改为对应地址/Capture翻译捕获
if vc.isOpened(): # 说明能打开
    oepn, frame = vc.read()# 此时open=1
else:
    open = False # 此时为0
while open:
    ret, frame = vc.read()#如果打开读取/则frame==1
    if frame is None: # 说明读取失败/跳出循环
        break
    if ret == True:
        gray = cv2.cvtColor(frame,  cv2.COLOR_BGR2GRAY)#视频每一帧变成灰度图
        cv2.imshow('result', gray)
        if cv2.waitKey(10) & 0xFF == 27:#27是esc退出键/跳出循环/10就是帧率
            break
vc.release()#不知道什么作用
cv2.destroyAllWindows() 
#"""
img=cv2.imread('E:/jupyter-notebook/notebook1/dog.jpg')
cat=img[0:50,0:200]#切片/200是x方向/50是y方向/0就是左上角
cv2.imshow('cat',cat)
cv2.waitKey(0)
cv2.destroyAllWindows()
#"""

"""
img2=cv2.imread('E:/jupyter-notebook/notebook1/cat.jpg')
b,g,r=cv2.split(img2)#颜色通道/获取各个单通道
b
array([[142, 146, 151, ..., 156, 155, 154],
       [107, 112, 117, ..., 155, 154, 153],
       [108, 112, 118, ..., 154, 153, 152],
       ...,
       [162, 157, 142, ..., 181, 170, 149],
       [140, 147, 139, ..., 167, 123, 104],
       [154, 154, 121, ..., 185, 130, 129]], dtype=uint8)

b.shape #大小相同
(414, 500)

img=cv2.merge((b,g,r))#这个函数将上面三个单通道二维组合成三维多通道
img.shape #BGR/012
(414, 500, 3)

# 只保留R
cur_img = img.copy()#只保留R通道
cur_img[:,:,0] = 0 #B赋值为0
cur_img[:,:,1] = 0 #G赋值0
cv_show('R',cur_img)
# 只保留G
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,2] = 0
cv_show('G',cur_img)
# 只保留B
cur_img = img.copy()
cur_img[:,:,1] = 0
cur_img[:,:,2] = 0
cv_show('B',cur_img)

"""
#卷积是进行图像特征提取
#边界填充
top_size,bottom_size,left_size,right_size = (50,50,50,50)#上下左右填充大小值
#使用copyMakeBorder函数
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)#0就是黑色

import matplotlib.pyplot as plt
plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')#复制法
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')#反射法
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')#反射法
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')#外包装法
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')#常量法

plt.show()

"""
BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常数值填充。
"""

#还有图像融合啥的去看notebook/里面有
#res = cv2.resize(img, (0, 0), fx=3, fy=1)
#plt.imshow(res)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值