python+opencv的图像学基础以及简单的人脸识别

python+opencv的图像学基础以及简单的人脸识别

一、列表

list(),int()都属于强制类型转化,将字符串转化为list列表
一维数组 a=[1 2 3 4 5 6]
a[4]=5
二维数组 b=[[1 2][3 4][5 6][7 8]]
b[1][1]=4
三维数组 c=[[[1 2][3 4]][[5 6][7 8]]]
c[1][1][1]=8

二、图像转字符画

目的:将图像转化按照列表格式输出

show_height=40#纵向打印字符数
show_width=40#横向打印字符数
ascii_char=list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
print(ascii_char[10])
#读取图片
pic=cv2.imread("E:/Literature/material/121398.jpg")
print(type(pic))
#<class 'numpy.ndarray'>
#图像灰度化
gray=pic[:,:,0]*0.2+pic[:,:,1]*0.7+pic[:,:,2]*0.1
print(gray)
print(len(gray))#长
print(len(gray[0]))#宽
pic_height,pic_width,pic_c=pic.shape
print(pic_height)
print(pic_width)
for i in range(show_height):
    y=int(i*pic_height/show_height)#获取真实图片上某个像素点的纵坐标
    text = ""
    for j in range(show_width):
        x = int(j * pic_width / show_width)  # 获取真实图片上某个像素点的横坐标
        text+=ascii_char[int(gray[y][x]/256*len(ascii_char))]
    print(text)
#结果
vvccvvvuvvvvvqcvvvvvcvvvvccccccvvvvvvvvv#每行四十的字符
uvvvuuuuuuvvuUXuvcvvvvvvcvccvcvvvvvvvvvv
uuuuuuuvuuuuv1fvvvvvvvvvvvcvvvvvvvvvvvuu
uunuuuuuuuuucYjuuuuuuuuuuuuvuuuuuuuuuuuv
nnnnnnnnnuuuucJunnuununuuuuucLuuunuunnun
xnnxnnnnnnqnJYuznxnnnnnunnnnQ_nnnuuunnnn
xxxxxxxxxxYxrcmx/xxxxxnnnnxnvvunnxnxxxxx
rrrrrrrrrr0cZxM{
   |rxxxxxxxxxxUz|xxrxxnxxx
jrjjrrrjjrkwJfOUUrnrrrrrrrrrLoz0rxrrxrrr
fjfjfjjjjqqUzaf*OoUjrjjjrrj10czLrrrrrrrr
ffffffffj*hU$Yjcr/cjjjjjjjrmnXxUxjjjjjjj
/ttttttttokQOnppJ@O|jffffjrbtcvprjffjjff
///////tWq%0zU#mbkzYfttttf/pz%80btCftfff
\\\\\/\|b8WCXXr0mQXtt//tt\CqqptxZbuftttt
|||\|\|\hMCYUjnjjrct\/\/f\CdWpdrZQ*|/\\\
(((||||\QdkYXxfcnxv\\\\\l)ok$%cYOpkQ/\\|
))((((((mZbcYYmaL\c\||||-X@d8wvuuQ0n\|||
11)))))(qQXXYY0uXfX((((urcYbWpznXUuz)(((
{
   {
   {
   11111mzUUUJcccnY11j/{
   |qbpMWYvOqvz()))
}{
   {
   {
   {
   {
   1{
   OUYOQXuz0uY)?twpXMqoLBXcXUZJ(111
}}}}}}}1OYm0Jz[t/tzJ)cX#vcrmp@rxzUcq1{
   {
   {
   
[[[[[[[Zz@Y0CupdpLwf*z*p000zmatqJJXC{
   [}}
]]]][]]ZY|*%pj(txuJ)vh/fC.jtrLqZtx0n/[[[
-?????-ZO$QwzMZjjbobvXrf)xxuxbkn#fJxU}]]
------]8hWLZcr\cxrZvJrXL@xBUz0JMqcn/0[??
_--_---wcOcQntJ(vnmcCc#8JOJYcUfCr08CdX--
___+[f/QvLUJJv@aYtqrtjjOo\0CXrj0xJOckc_-
_+_~zLO0uuJYx\znr|wrUX\+qUJOrL0puUzvqr_-
|fCYJo#YxjXUqfXrx\QnC|\|Y}n/j\WujzxYmp~~
8cqB8/mOrOXYXbQc|{
   n0r1|(t\fn/tJn(uUmjZi~
XWmjY/qcoQYznr){
   rYr|txttuCXxzQZJf[{
   1/cq}
XQzUpCZzr?(Ltr))(/u/jxz0un(rftt\mvffbtU+
QadzLnaZ$0vJnWLut|Z|tOdJnxh%8&d)%&|(1jt>
0JCxM%zvWmvLnu|bjfznrjfx|nzf|tx}QjLnXQ/k
(YbjMUQvvmxOnfX[ttXfxjtva}<aY\QtCj/n|Lx)
UXXXkQUXcOnLnjujfjXxnrcj(0j[OQO/Yj)Qf0UJ
z!cYrcXcYLjJut*&*xjx/xC[\hba{
   bUnXfmUJLCc
v<vCjuCzzCrJxz--mcrn\xYrn@J/xczXxf++Zxdr
v(uxxnJz(CjYju$@Yux/f/XtfxwJQUrQt{
   $1v\Qj
cxzu}zYXcUrUtv@@$jfXnuYUdQCZCCuv|u&*c)Of

三、opencv的简单使用

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,
可以运行在Linux、Windows、Android和Mac OS操作系统上。
它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,
同时提供了Python、Ruby、MATLAB等语言的接口,
实现了图像处理和计算机视觉方面的很多通用算法。
3.1显示图片

import cv2
#绝对路径
img=cv2.imread('E:/Literature/material/personal/12.png')
#相对路径
cv2.imread(./image/12.png)
#打印图像数组
print(img)
#打印图像长宽和像素#bgr格式
print(img.shape)
cv2.imshow("student",img)
#让cv2的类型进行等待,不会闪退,我们可以去设置时间让图像延迟关闭,数字代表停留时间,ms级
#括号里写等待时间
cv2.waitKey()
#释放资源
cv2.destroyAllWindows()

运行结果
在这里插入图片描述
3.2改变图像大小和黑白图

import cv2
img=cv2.imread('E:/Literature/material/personal/2.jpg')#绝对路径
#改变图像大小和黑白图
gray=cv2.cvtColor(img,code=cv2.COLOR_BGR2GRAY)
#将图像进行黑白图转换
#三维数字变为二维数组
cv2.imshow("student",gray)
cv2.waitKey()
cv2.destroyAllWindows()
#更改图像大小
imgresize=cv2.resize(gray,dsize=(222,222))
cv2.imshow("student_resize",imgresize)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果
在这里插入图片描述
在这里插入图片描述
3.3图像剪裁

import cv2
img=cv2.imread('E:/Literature/material/personal/2.jpg')#绝对路径
#剪裁
#将图像从横范围第一个像素,取到222,纵坐标从1取到222.
imgjc=img[:222,:222]
cv2.imshow("imgjc",imgjc)
cv2.waitKey()
cv2.destroyAllWindows()
#图片的切片使用
#将图像从横范围111,取到222,纵坐标从1取到222.
imgqp=img[111:222,:222]
cv2.imshow("imgqp",imgqp)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果
在这里插入图片描述
在这里插入图片描述

四、简单的人脸识别

import cv2
img=cv2.imread('E:/Literature/material/personal/2.jpg')#绝对路径
#人脸的识别,保证人脸图片清晰,要尽量选择正脸进行识别
#导入cv2中人脸特征数据的数据包,里面都是人脸特征数据
#在python环境中,有已经集成好的训练文件,位置lib—>site-packages—>cv2—>data—>haarcascade_frontalface_alt.xml
#获取你的特征数据包
face_date=cv2.CascadeClassifier("E:/python3.6.8/Lib/site-packages/cv2/data/haarcascade_frontalface_alt.xml")
#图像,缩放距离,最小间距
faces=face_date.detectMultiScale(img,scaleFactor=1.1,minNeighbors=5)
#随着返回着二维数组里外维度下元素的个数表示识别人脸的个数
print(faces)#表示距离图像边缘的距离
for x,y,w,h in faces:
    #画矩形
    #人脸图像,人脸方框的初始位置,人脸方框的末尾坐标,边框颜色
    cv2.rectangle(img,pt1=(x,y),pt2=(x+w,y+h),color=[255,0,0])
cv2.imshow("faces",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果
[[ 90 137 62 62]]
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114477.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm中使用anaconda部署python环境_pycharm怎么用anaconda的环境

    pycharm中使用anaconda部署python环境_pycharm怎么用anaconda的环境每一种语言的开发环境都是包含了运行环境和开源包两个核心内容。比如Java,JDK是运行环境,而开发导入需要用到的各种第三方工具都是以开源包的形式导入的。再比如Python,python3.6/python2.7是它的运行环境,而pynum,pandas这些数据处理工具就是也是开源包。通常情况下,我们都是使用IDE在项目中统一管理运行环境和开源包。比如开发JavaWeb项目我们使用Myec…

    2022年8月27日
    4
  • python学习——pandas查看数据集null值:isnull

    python学习——pandas查看数据集null值:isnull在数据集中,可能有些字段下会有null值,我们在进行数据处理的时候,不能视而不见,可以使用isnull查看是否有空值In:all_dummy_df.isnull().sum().sort_values(ascending=False).head(10)Out:LotFrontage486GarageYrBlt159MasVnrArea23…

    2022年10月20日
    3
  • 对象数组「建议收藏」

    对象数组「建议收藏」定义一组多个对象的变量,就要用对象数组。对象数组的定义包含动态初始(类对象数组名[]=new类[长度];),数组里的每个元素都是引用类型的默认值;静态初始化(类对象数组名称[

    2022年6月30日
    22
  • 通过网银在线进行在线支付[通俗易懂]

    通过网银在线进行在线支付[通俗易懂]总结一下在我们一个项目中使用的通过网银在线进行在线支付的步骤:下面我用一个asp.net的例子做一下说明:一共建立2个页面Send.aspx(发送交易数据给网银在线)和Receive.as

    2022年7月1日
    25
  • python的jieba库教程_python下载jieba库

    python的jieba库教程_python下载jieba库jieba是python的一个中文分词库,下面介绍它的使用方法。安装方式1:pipinstalljieba方式2:先下载http://pypi.python.org/pypi/jieba/然后解压,运行pythonsetup.pyinstall功能下面介绍下jieba的主要功能,具体信息可参考github文档:https://github.com/fxsjy/jieba分词jieba常用的三种模式:精确模式,试图将句子最精确地切开,适合文本分析; 全模式

    2022年9月15日
    2
  • vscode代码自动提示_vscode智能提示

    vscode代码自动提示_vscode智能提示VSCode自动补全,VSCode当中的自动补全内容,其实是由语言服务来提供的。本文介绍VSCode自动补全功能和VSCode自动补全设置。VSCode为编程语言工作者提供了统一的API,即LanguageServerProtocol,每种语言都能够通过实现这个API在VSCode上得到类似IDE的开发体验,而各个语言根据这个API实现的服务,就被称为语言…

    2025年8月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号