opencv3读入、显示、保存图像;绘图函数

文章目录

  • 声明
  • 正文
    • 1.对图像的操作
      • 1.1 读入图像
      • 1.2 显示图像
      • 1.3 保存图像
    • 2.绘图函数
      • 2.1 画线
      • 2.2 画矩形
      • 2.3 画圆
      • 2.4 画椭圆
      • 2.5 画多边形
      • 2.6 在图片上添加文字
      • 2.7 综合示例
  • 感谢观看!

声明

声明:本系列博客是我在学习OpenCV官方教程中文版(For Python)(段力辉 译)所做的笔记。所以,其中的绝大部分内容引自这本书,博客中的代码也是其配套所附带的代码或书中的代码,侵删。其中部分代码可能会因需要而改动。在本系列博客中,其中包含书中的引用,也包括我自己对知识的理解,思考和总结。本系列博客的目的主要有两个,一个是可以作为我自己的学习笔记,时常复习巩固。第二个是可以为想学习python下的opencv 3 相关知识的朋友提供一些参考。

正文

1.对图像的操作

1.1 读入图像

读入图像使用cv2.imread()函数。括号内第一个参数是图片名,第二个参数是告诉函数应该如何读取这幅图片。

import cv2
img=cv2.imread('messi5.jpg',0)

1.2 显示图像

显示图像使用函数cv2.imshow(),第一个参数是窗口的名字,其次才是我们的图像。

import cv2
img=cv2.imread('messi5.jpg',0)

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:
opencv3读入、显示、保存图像;绘图函数_第1张图片

  • cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫
    秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果
    按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。如果没
    有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限
    期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键 a 是否
    被按下。
  • cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果
    你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删
    除的窗口名。

1.3 保存图像

使用cv2.imwrite()保存图像。首先需要一个文件名,然后是需要保存的图像。

cv2.imwrite('messigray.png',img)

2.绘图函数

以下的所有函数都需要设置这些参数:

  • img:你想要绘制图形的那幅图像。
  • color:形状的颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0)
    代表蓝色。对于灰度图只需要传入灰度值。
  • thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形
    就会被填充。默认值是 1.
  • linetype:线条的类型,8 连接,抗锯齿等。默认情况是 8 连接。cv2.LINE_AA
    为抗锯齿,这样看起来会非常平滑。

2.1 画线

要画一条线,只需要告诉函数这条线的起点和终点。


cv2.line(img,(0,0),(511,511),(255,0,0),5)
#参数分别代表绘图窗口,起点,终点,颜色,粗细

cv2.polylines() 可以被用来画很多条线。只需要把想要画的线放在一个列表中,将这个列表传给函数就可以了。每条线都会被独立绘制。这会比用cv2.line() 一条一条的绘制要快一些。

2.2 画矩形

要画一个矩形,你需要告诉函数的左上角顶点和右下角顶点的坐标。这是在图像的右上角画一个绿色的矩形。


cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
#参数含义与画线的相同
#

2.3 画圆

如果要画圆,只需要指定圆形的中心点坐标和半径大小。这是在上面的矩形中画一个圆。


cv2.circle(img,(447,63), 63, (0,0,255), -1)
# 如果粗细为-1,则表示为实心

2.4 画椭圆

画椭圆比较复杂,我们要多输入几个参数。一个参数是中心点的位置坐标。
下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧沿顺时针方向起始的角度和结束角度,如果是 0 很 360,就是整个椭圆。下面的例子是在图片的中心绘制半个椭圆。


cv2.ellipse(img,(256,256),(100,50),0,0,180,100200250,5)
#参数依次代表窗口,椭圆中心,椭圆长轴短轴,椭圆逆时针旋转角度,椭圆起绘制起始角度,椭圆绘制结束角度,颜色,粗度

2.5 画多边形

画多边形,需要指点每个顶点的坐标。用这些点的坐标构建一个大小等于行数 X1X2 的数组,行数就是点的数目。这个数组的数据类型必须为 int32。
这里画一个黄色的具有四个顶点的多边形。

    pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
    pts = pts.reshape((-1, 1, 2))
    cv.polylines(img,pts=pts,isClosed=True, color=(100, 25, 55), thickness=3)
#如果第三个参数是 False,我们得到的多边形是不闭合的(首尾不相连)。

2.6 在图片上添加文字

要在图片上绘制文字,你需要设置下列参数:

  • 你要绘制的文字
  • 你要绘制的位置
  • 字体类型
  • 字体的大小
  • 文字的一般属性如颜色,粗细,线条的类型等

在图像上绘制白色的opencv


font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)
# 参数依次代表窗口,要写的文字,文字位置,字体,字体大小,颜色,粗细

2.7 综合示例

import cv2 as cv
import numpy as np

def draw_demo(img):
    cv.line(img, (20, 0), (211, 985), (128, 0, 128), 50)
    cv.rectangle(img,(250,0),(288,400),(0,100,255),3)
    cv.circle(img,(100,63), 63, (0,0,102), -1) 
    cv.ellipse(img,(256,256),(200,120),0,0,360,100200150,10)
    pts = np.array([[10, 5], [200, 30], [350, 20], [390, 10]], np.int32)
    pts = pts.reshape((-1, 1, 2))
    cv.polylines(img,pts=pts,isClosed=True, color=(200, 25, 55), thickness=3)
    font = cv.FONT_HERSHEY_SIMPLEX
    cv.putText(img, 'OpenCV', (10, 500), font, 4, (255, 255, 255), 2)
    cv.imshow("example", img)

def main():
    cv.namedWindow("example")
    img = np.zeros((512, 512, 3), np.uint8)  
    draw_demo(img)
    
    cv.waitKey(0)  
    cv.destroyAllWindows() 

if __name__ == '__main__':
    main()

运行结果:
opencv3读入、显示、保存图像;绘图函数_第2张图片

感谢观看!

如有错误,欢迎批评指正!

你可能感兴趣的:(python,opencv,计算机视觉)