opencv基础

Posted by Jinming Qiao on April 5, 2020

opencv基础


环境:python3.7

依赖:opencv

系统:ubuntu 18


新疆水库项目计划流程

  • 第一阶段:基于形态学图像识别基础
    1. 图像基础知识理解掌握
    2. 图像相关处理知识与基础系统实现
    3. opencv系统库掌握学习与项目1.0版本系统实现运行
  • 第二阶段:基于计算机视觉图像识别基础
    1. 计算机视觉相关知识,深度学习机器学习与相关数据知识学习
    2. 第一阶段积累的算法与新算法比较与实现
    3. 水库项目图像检测2.0更新运行版本
  • 第三阶段:项目算法整合对比整理
    1. 整合各阶段算法与系统具体实现,落实相关文档
    2. 系统测试与运行检测维护,系统发布等
    3. 系统算法整合落实相关文档与开发学习阶段知识
图像基本处理
  1. cv2.imread(文件名,标记)读入图像,
    • cv2.IMREAD_COLOR():读入彩色图像
    • cv2.IMREAD_GRAYSCALE():以灰度模式读入图像
import numpy as np 
import cv2 
img = cv2.imread('45.jpg',0)
  1. cv2.imshow()显示图像,
    • cv2.waitKey():等待键盘输入,为毫秒级
    • cv2.destroyAllWindows():可以轻易删除任何我们建立的窗口,括号内输入想删除的窗口名
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. cv2.imwrite(文件名,img)保存图像,
cv2.imwrite('messigray.png',img)
  1. 加载一个灰度图,显示图片
import numpy as np
import cv2

img = cv2.imread('45.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k==27:
	cv2.destroyAllWindows()  #wait for ESC key to exit
elif k == ord('s'):
	cv2.imwrite('46.png',img)  #wait for 's' key to save and exit
	cv2.destoryAllWindows()
  1. Matplotlib绘图库,显示图像
import numpy as np
import cv2
from matplotlib import pyplot as plt
img =cv2.imread('45.jpg',0)
plt.imshow(img,cmap='gray',interpolation = 'bicubic')
plt.xticks([]),plt.yticks([])  #to hide tick values on X and Y axis
plt.show()
图像绘制
  1. 画线,需要指定函数这条线的起点和终点。
import numpy as np
import cv2

#Create a black image
img = np.zeros((512,512,3),np.uint8)

#draw a diagonal blue line with thickness of 5 px
cv2.line(img,(0,0),(260,260),(255,0,0),5)

#为了演示,建窗口显示出来
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.resizeWindow('image',1000,1000)#定义frame的大小
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 画矩形,需要指定函数左上角顶点和右下角顶点的坐标
import numpy as np
import cv2

#Create a black image
img = np.zeros((512,512,3),np.uint8)

cv2.rectangle(img,(350,0),(500,128),(0,255,0),3)

cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.resizeWindow('image',1000,1000)#定义frame的大小
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 画圆,需要指定圆心坐标和半径大小,可以在上面矩形中画个圆
import numpy as np
import cv2

#Create a black image
img = np.zeros((512,512,3),np.uint8)

cv2.rectangle(img,(350,0),(500,128),(0,255,0),3)#矩形
cv2.circle(img,(425,63),63,(0,0,255),-1)#圆,-1为向内填充

cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.resizeWindow('image',1000,1000)#定义frame的大小
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 画椭圆,一个参数是中心点的位置坐标。 下一个参数是和短的度。椭圆沿时方向旋的度。椭圆弧演 时方向始的度和结束度如果是 0 很 360就是整个椭圆。
import numpy as np
import cv2

#Create a black image
img = np.zeros((512,512,3),np.uint8)

cv2.ellipse(img,(256,256),(100,50),0,0,360,255,-1)

cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.resizeWindow('image',1000,1000)#定义frame的大小
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 画多边形,需要指定每个顶点的坐标,构建一个大小相等于行数X1X2的数组,行数就是点的数目,这个数组必须为int32。
import numpy as np
import cv2

#Create a black image
img = np.zeros((512,512,3),np.uint8)

pts=np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)
pts = pts.reshape((-1,1,2))
#这里reshape的第一个参数为-1,表明这一维度的长度是根据后面的维度计算出来的
cv2.polylines(img,[pts],True,(0,255,255)) 
#注意第三个参数若是False,我们得到的是不闭合的线

#为了演示,建窗口显示出来
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.resizeWindow('image',1000,1000)#定义frame的大小
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()