树莓派 opencv学习记录DAY-2-图像绘画

Posted 凉山有客不自赏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派 opencv学习记录DAY-2-图像绘画相关的知识,希望对你有一定的参考价值。

今天学习对图像的绘画操作

绘制直线、圆、矩形、椭圆、多边形、文字

图形函数
直线cv.line(img,start,end,color,thickness)
图片对象,起始坐标(x轴,y轴),结束坐标,颜色,宽度

cv.circle(img,centerpoint, r, color, thickness)

图片对象,中心点坐标,半径大小,颜色,宽度
矩形

cv.rectangle(img,leftupper,rightdown,color,thickness)

图片对象,左上角坐标,右下角坐标,颜色,宽度
椭圆

cv.ellipse(img,centerpoint,axesLength,angle,stratAngle,endAngle,color,thickness)

图片对象,中心点坐标,长短轴,顺时针旋转度数,开始角度,颜色,宽度
文字

cv.putText(img,text,station, font, fontsize,color,thickness,lineType)

图片对象,文字,坐标,字体,大小,颜色,宽度,线型

这里给出font的样式:

cv.FONT_HERSHEY_SIMPLEX
cv.FONT_HERSHEY_PLAIN
cv.FONT_HERSHEY_DUPLEX
cv.FONT_HERSHEY_COMPLEX
cv.FONT_HERSHEY_TRIPLEX
cv.FONT_HERSHEY_COMPLEX_SMALL
cv.FONT_HERSHEY_SCRIPT_SIMPLEX
cv.FONT_HERSHEY_SCRIPT_COMPLEX
cv.FONT_ITALIC
 

多边形绘画

需要用到2个np函数和1个cv函数

array创建各点坐标的数组
np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)# array必须是int32型
reshape变换数组排列格式,将数组设置成cv函数中通用格式
pts = pts.reshape((-1,1,2,))
#括号里的3给参数分别是行数、列数、维数,意思是以一列显示这个二维数组

这里举个简单的例子

np.arange(16).reshape(2,8) #生成16个自然数,以2行8列的形式显示
# Out: 
# array([[ 0,  1,  2,  3,  4,  5,  6,  7],
#       [ 8,  9, 10, 11, 12, 13, 14, 15]])

参数为-1时,会自动计算
np.arange(16).reshape(2,-1) #生成16个自然数,以2行x列的形式显示
x = 16 / 2 = 8
cv2.polylines将各点连线
cv2.polylines(img,array,isClosed=True/False, color, thickness)
#图片对象,点坐标,是否闭合,颜色,宽度

例程:


pts = np.array([[10, 10], [80, 10], [80, 100], [10, 100]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], True, (255, 255, 0), 1)

综合示例:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

img = np.zeros((512,512,3),np.uint8)
#img = cv.imread('islands.jpg',0)
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.circle(img,(50,50), 30, (255,55,0), 10)
cv.putText(img,"text",(36,400),cv.FONT_HERSHEY_SCRIPT_COMPLEX,4,(55,55,0),2,cv.LINE_AA)
cv.ellipse(img,(333,333),(100,50),0,0,360,(255,222,222),-1)
pts = np.array([[10, 10], [80, 10], [80, 150], [10, 200]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv.polylines(img, [pts], True, (255, 255, 0), 1)

cv.imshow('image',img)
cv.waitKey(0)
plt.imshow(img[:,:,::-1])

plt.show()

效果展示:

以上是关于树莓派 opencv学习记录DAY-2-图像绘画的主要内容,如果未能解决你的问题,请参考以下文章

打死树莓派-树莓派3代jessie+Opencv-解决安装不了libgtk2.0-dev包问题

树莓派安装openCV做图像识别

树莓派 opencv学习记录DAY-1-库的基本认识和简单函数

使用opencv去操作树莓派摄像头保存图片和视频

树莓派学习笔记—— 源码方式安装opencv

2021-10-30 vscode+Xming+树莓派使用python-opencv的imshow()函数时显现图像为灰色问题