计算机视觉(一)

约定不等于承诺〃 2022-06-03 08:09 344阅读 0赞

大多数常用的OpenCv函数都在cv2模块内,cv2并非指OpenCv2.x.x,是指该模块引入了一个跟好的API接口

一、二维Numpy创建图像

cvtColor:格式转换

  1. def cvtColor(src, code, dst=None, dstCn=None): pass
  2. #coding:utf-8 #绝对路径是使用的是‘/’ from cv2 import * import numpy #创建矩阵,元素类型是8位无符号整型 img=numpy.zeros((100,100),dtype=numpy.uint8) print img.shape#shape返回图像的行列数及通道数 #格式转换:使用函数转换成BGR格式----3通道 img=cvtColor(img,COLOR_GRAY2BGR) print img.shape imshow("Img",img) waitKey()

二、显示一张图片

将光标定位在函数名处,按下Ctrl+B。Pycharm会自动跳转到函数的定义:

函数:

1、imread:读取图片

  1. def imread(filename, flags=None): pass

参数1:图片名称

参数2:flag默认1(原图)

还有:

  1. IMREAD_ANYCOLOR = 4
  2. IMREAD_ANYDEPTH = 2
  3. IMREAD_GRAYSCALE = 0(灰度图)
  4. IMREAD_LOAD_GDAL = 8
  5. IMREAD_UNCHANGED = -1

2、nameWindow:窗口显示函数

  1. def namedWindow(winname, flags=None): pass
  2. 参数1:窗口名
  3. 参数2::
  4. 3imshow:图片显示
  5. def imshow(winname, mat): pass参数1:要显示图片所在窗口名
  6. 参数2:图片对象
  7. #coding:utf-8 #绝对路径是使用的是‘/’ from cv2 import * image=imread('D:/temp/1.jpg') namedWindow('My picture',1) imshow('My picture',image) waitKey() 三、图片保存 imwrite:要求图像为BGR或灰度格式 def imwrite(filename, img, params=None): pass参数1:图片名加格式 参数2:待保存图片
  8. 四、图像元素访问 1、直接访问 image[i,j]:i表示图像的行坐标,j表示图像的纵坐标。输出的是该坐标处的像素值(个数>=1)。 image[i,j,k]:i表示图像的行坐标,j表示图像的纵坐标,k表示通道。输出的是该坐标处第k通道的像素值(=1)。 若一幅图像的每个通道为8位,则可将其显示转换为标准的一维Python bytearray格式: byteArray = bytearray(image) 反之,bytearray含有恰当顺序的字节,可以通过显示转换和重构,得到numpy.array形式的图像:  garyImage = numpy.array(garyByteArray ).reshape(height, width) bgrImage = numpy.array(bgrByteArray ).reshape(height, width, 3) 无论改变怎样的形状,图像的总像素值不变即 height*width*k 值一定 #coding:utf-8
  9. #绝对路径是使用的是‘/’
  10. from cv2 import *
  11. import numpy
  12. #创建矩阵,元素类型是8位无符号整型
  13. img=numpy.zeros((100,100),dtype=numpy.uint8)
  14. print img
  15. print img.shape#shape返回图像的行列数及通道数
  16. #格式转换:使用函数转换成BGR格式----3通道
  17. img=cvtColor(img,COLOR_GRAY2BGR)
  18. for i in range(50,60):
  19. for j in range(50,60):
  20. img[i,j]=[0,255,0]
  21. print img.shape
  22. byteArray=bytearray(img)
  23. BgrImg=numpy.array(byteArray).reshape(1000,100,3)
  24. print byteArray
  25. imshow("Img",img)
  26. imshow("Img1",BgrImg)
  27. waitKey()
  28. Demo #coding:utf-8
  29. #绝对路径是使用的是‘/’
  30. from cv2 import *
  31. # from cv22 import *
  32. import numpy
  33. import os
  34. # 创建一个90000个随机字节的数组
  35. ##os.urandom(n) 返回n个随机byte值的
  36. rdByteArray=bytearray(os.urandom(90000))
  37. #转换成矩阵形式1*n形式
  38. flatNumpyArray=numpy.array(rdByteArray)
  39. # print flatNumpyArray
  40. # print rdByteArray
  41. #将矩阵改变形状为300*300=90000的灰度图
  42. grayImag=flatNumpyArray.reshape(600,600)
  43. #存储
  44. imwrite('ranImage.png',grayImag)
  45. #显示
  46. imshow('P1',grayImag)
  47. #将矩阵转换成200*150*3=360000的彩色图
  48. bgrImage=flatNumpyArray.reshape(200,150,3)
  49. imwrite("bgrImage.png",bgrImage)
  50. imshow("P2",bgrImage)
  51. waitKey()运行后显示结果:
  52. 2、使用itemitemset函数 item(i,j,k):i,j像素坐标,k表第k通道 itemset((i,j,k),val):(i,j,k)同上,val表该坐标下的值修改为val
  53. from cv2 import *
  54. img=imread('D:/temp/1.jpg')
  55. print img.item(150,120,0)
  56. print img[150,120,0]
  57. img.itemset((150,120,0),255)
  58. print img[150,120,0]
  59. 图片的高度即行数,宽度即列数
  60. 3Roi(感兴趣区域设置) Demo from cv2 import *
  61. import numpy
  62. img1=imread("D:/temp/1.jpg")
  63. img2=imread("D:/temp/3.jpg")
  64. #输出图片大小
  65. print img1.shape
  66. print img2.shape
  67. print img1.size
  68. print img1.dtype
  69. imshow("Pic1",img1)
  70. imshow("Pic2",img2)
  71. #选定区域赋值
  72. img1[100:110,100:110]=0
  73. imshow("Pic3",img1)
  74. Roi=img2[100:200,100:200]
  75. imshow("Roi",Roi)
  76. img1[0:100,300:400]=Roi#确保两个区域大小相同
  77. imshow("pic",img1)
  78. waitKey()
  79. shapeNumPy返回包含宽度、高度和通道数(如果图像是彩色的)数组,这在调试图像类型时很有用;如果图像是单色或灰度的,将不包含通道值; size:该属性是指图像像素的大小; datatype:该属性会得到图像的数据类型(通常为一个无符号整数类型的变量和该类型占的位数,比如unit8类型)
  80. 五、视频文件读写 D:\Anaconda;D:\Anaconda\Scrips;D:\opencv\sources\3rdparty\ffmpeg; 1、读取视频 OpenCV读取视频, 获得视频的格式, 读取视频的每一帧, 播放控制; 使用VideoCapture()和read()函数 def VideoCapture(): # real signature unknown; restored from __doc__ """ VideoCapture() -> <VideoCapture object> or VideoCapture(filename) -> <VideoCapture object> or VideoCapture(device) -> <VideoCapture object> """ pass read()函数返回两个值 第一个值为True或False,代表有没有读到图片 第二个是frame,是当前截取一帧的图片。
  81. Demo1
  82. from cv2 import * import string #获得视频的格式 filename='59.flv' videocapture=VideoCapture(filename) # #获得码率 fps=videocapture.get(CAP_PROP_FPS) #读帧 success,frame=videocapture.read() while success: # 显示 imshow("My video",frame) # 延迟 waitKey(1000/int(fps)) # 获取下一帧 success,frame=videocapture.read()通过编译器,可终止视频播放。
  83. Demo2 from cv2 import * filename='D:/temp/2.mp4' cap =VideoCapture(filename) while (cap.isOpened()): ret,frame = cap.read() imshow('video test',frame) key =waitKey(10) #按下Esc键视频退出 if key == 27: break #按下空格键,截取一张图 if key == ord(' '): imwrite('vid_result.jpg',frame)
  84. 2、写视频
  85. OpenCV写视频, 需要指定视频的格式, 可以从原视频中获取; 使用VideoWriter()和write()函数
  86. def VideoWriter(filename=None, fourcc=None, fps=None, frameSize=None, isColor=None): # real signature unknown; restored from __doc__
  87. """ VideoWriter([filename, fourcc, fps, frameSize[, isColor]]) -> <VideoWriter object> """ pass参数1:输出视频名称+格式
  88. 参数2:视频编码
  89. fourcc 四个字符用来表示压缩帧的codec 例如: CV_FOURCC('P','I','M','1') = MPEG-1 codec CV_FOURCC('M','J','P','G') = motion-jpeg codec CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec CV_FOURCC('U', '2', '6', '3') = H263 codec CV_FOURCC('I', '2', '6', '3') = H263I codec CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
  90. 参数3fpsFrames Per Second”在计算机图像范畴内被翻译为:“每秒传输帧数”。
  91. 参数4:视频帧尺寸
  92. 参数5:如果非零,编 码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
  93. 帧速率和帧大小也必须要指定,因为需要从另一个视频文件复制视频帧,这些属性可以通过VideoCapture类的get()函数得到。
  94. from cv2 import * import string #获得视频的格式 #输入视频路径 InputVideoPath='D:/temp/6.mp4' videocapture=VideoCapture(InputVideoPath) #输出路径 OutVideoPath='D:/temp/1.avi' # #获得码率及尺寸 fps=videocapture.get(CAP_PROP_FPS) size=(int(videocapture.get(CAP_PROP_FRAME_WIDTH)),int(videocapture.get(CAP_PROP_FRAME_HEIGHT))) #指定写视频的格式, I420-avi, MJPG-mp4 videowrite=VideoWriter(OutVideoPath,VideoWriter_fourcc('I', '4', '2', '0'),fps,size) #读帧 success,frame=videocapture.read() while success: # 显示 imshow("My video",frame) # 延迟 waitKey(1000/int(fps)) # # 写视频帧 videowrite.write(frame) # 获取下一帧 success,frame=videocapture.read()
  95. 3、读/写视频出现错误
  96. 参考:
  97. 解决windows+python+opencv无法读取视频的问题: http://blog.csdn.net/lql0716/article/details/52476190 Python Opencv2 Opencv3 videoCapture 视频读取失败解决办法: http://blog.csdn.net/serena9636/article/details/52525379 python + opencv: 解决不能读取视频的问题: http://lib.csdn.net/article/opencv/32902 Opecv + Anaconda 读取视频(windows) https://www.cnblogs.com/ctfighting/p/5689925.html 解决python中opencv无法读取视频的问题
  98. http://blog.sina.com.cn/s/blog_692047900102wpbv.html
  99. 参考:
  100. http://www.cnblogs.com/xiaotongtt/p/6594133.html

发表评论

表情:
评论列表 (有 0 条评论,344人围观)

还没有评论,来说两句吧...

相关阅读

    相关 计算机视觉和模式识别(

    计算机视觉和模式识别 计算机视觉和图像处理是一个令很多人充满兴趣的计算机领域,它不仅涉及到很多精妙和令人称赞的数学推导和漂亮的代码,更是应用到我们生活的方方面面,简单如P

    相关 计算机视觉(三)

    1、滤波器 傅里叶变换主要作用反应图像各区域像素变化的幅度。 滤波器(核)矩阵:一组权重集合(内部所有值加和为0),作用在源图像的一个区域(滑动),并由此生成目标图像的一个