接下来的几篇文章将会记录本人学习计算机视觉的第一个课程的学习成果,与各位共享。
环境搭建:win10
pip install opencv-python
pip install opencv-contrib-python
pip install pytesseract
以上命令安装完所需的库
from cv2 import cv2 as cv
import numpy as np
def video_demo():
capture = cv.VideoCapture(0)#捕获摄像头
while(True):
ret,frame = capture.read()#获取摄像头数据流
cv.imshow("video",frame)
c = cv.waitKey(50)
if c == 27:
break
def color_space_demo(image):#色彩空间
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
cv.imshow("gray",gray)
hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV)
# cv.imshow("hsv",hsv)
yuv = cv.cvtColor(image,cv.COLOR_BGR2YUV)
# cv.imshow("yuv",yuv)
# 转换图像二值图
ret,dst = cv.threshold(gray,180,255,cv.THRESH_BINARY)
cv.imshow('binary:',dst)
def access_pixels(image):
height,width,channels = image.shape
print("height:%s,width:%s,channels:%s"%(height,width,channels))
for row in range(height):
for col in range(width):
for c in range(channels):
pv = image[row,col,c]
image[row,col,c] = 255 - pv
cv.imshow("pixels_demo",image)
def inverse(image):
# 对图像矩阵中的每个像素值进行二进制或操作
# 图像灰度值,黑~白,0~255,一般计算方法:Gray=R*0.3+G*0.59+B*0.11;
dst = cv.bitwise_not(image)
cv.imshow("image change",dst)
rows,cols,channels = image.shape
roi = image[0:100,0:100]
def get_image_info(image):
# rows,cols,channels = img2.shape
print(image)
print(type(image))
print(image.shape)
print(image.size)
print(image.dtype)
print("------hello---------")
src = cv.imread("./dance.jpg")
cv.namedWindow("Input Image",cv.WINDOW_AUTOSIZE)
cv.imshow("Input Image",src)
gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)
# get_image_info(gray)
cv.imwrite("./img_gray.jpg",gray)
# getTickCount()表示操作系统启动至当前代码时所走的tick数,getTickFrequency()函数获得机器主频,(t2 - t1)/cv.getTickFrequency()*1000)表示,运行
# 所花tick数/电脑运行频率得到总的运行时间,单位为s,*1000换算为ms
t1 = cv.getTickCount()
color_space_demo(src)
inverse(src)
#access_pixels(src)
#video_demo()
t2 = cv.getTickCount()
access_pixels(src)
print("time:%sms"%((t2 - t1)/cv.getTickFrequency()*1000))
cv.waitKey(0)
cv.destroyAllWindows()
以上代码代码实现读入图片,显示图片,打开摄像头获取摄像头的视频数据。
还涉及色彩空间的知识,目前的理解就是不同格式的图片。
关于inverse那个函数,那个函数等于就是调用现成的接口以实现access_pixels函数中通过几个for循环实现的功能,无需等待,运行即可得到结果。足见,底层语言的高效率,python还是太嫩了。
注意:opencv读取的视频是没有声音的。(p1--p4)
======================
"多年后"补记坑:
1.运行报如下错误:
C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:352: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
提示中很显然看出是图片读入失败,尝试print图片信息显示为None,所以肯定图片没读进来,应该是路径出了问题。一番搜索发现,windows默认路径应该是反斜杠,我们应该改成斜杠,但是修改后发现问题依然没能解决。凭着多年的直觉,应该是文件夹名称的问题,尝试一番果然,文件夹名称最好用英文,中文会有莫名其妙的冲突。。。。。
2.waitKey(decay)
decay为0时,无限等待,这里需要注意,单位是ms
3.hsv,yuv,ray,色彩空间,自行百度
4.inconsistent use of tabs and spaces in indentation (, line 42)pylint(syntax-error)
补记:
当我们使用anaconda时,在visual stdio code中切换环境,activate 环境名,deactivate退出环境