因工作中需要对视频图片做处理,于是就把应用得到的几个需求功能在网上solo了一波。
一、图片对比
主要应用的库Image,函数Image.size(),resize(),convert(),getpixel(),
1、根据R-G -B三原色原理:
只要使R=G=B,三者的值相等就可以得到灰度图像。R=G=B=255为白色,R=G=B=0为黑色,R=G=B=小于255的某个整数时,此时就为某个灰度值。
在python里处理图片直接设置mode='L'模式,Image库源码处理时,根据如下公式做的RGB转换:
L = R * 299/1000 + G * 587/1000 + B * 114/1000
2、为了处理方便,将图片比例做一定的调整,分辨率设置为12*12,获取像素值(灰度值)。
求出平均灰度值,SUM(像素点的像素)/像素点个数;
根据处理后的图片的像素跟平均像素做对比,生成图像的波动值,如下:
3、最后根据图像的波动值对比,生成两张图片的相似度值。
此方法比较可取的是图片的单个像素点的像素(0-255)取出有固定值,一定程度上可以参照;不可取的地方是取出的平均像素值可能相差比较大,后期优化可在此基础上进行。
二、图片文字识别
主要应用库,pytesseract,Image,函数,pytesseract.image_to_string(),crop(),和一个重要的识别库Tesseract-OCR。
1、得到图片,网上很多方式,selenium里有driver.get_screenshot_as_file()获取截图等其它方式。
2、截取想要识别的图片区域,支持英文、数字、中文等其它语言。
A = image123.jpg;
需要截取的图片范围box= (68,140,232,155),这里自定义。
需要的图片:B = Image.open(A).crop(box).save(image124.jpg)
3、最后是识别
print(pytesseract.image_to_string(Image.open(image124.jpg)))
图片识别主要是借助识别库里的原始数据和现在获取的数据做像素对比输出,喜欢研究的可以看看识别库的实现。
先写到这,希望能帮到需要图片识别的伙伴。如有纰漏,欢迎指正!