OpenCV与图像处理学习三——线段、矩形、圆、椭圆、多边形的绘制以及文字的添加
OpenCV與圖像處理學習三——線段、矩形、圓、橢圓、多邊形的繪制以及文字的添加
- 一、OpenCV中的繪圖函數
- 1.1 線段繪制
- 1.2 矩形繪制
- 1.3 圓繪制
- 1.4 橢圓的繪制
- 1.5 多邊形繪制
- 1.6 添加文字
上兩次筆記主要知識點回顧:
- 數字圖像基本概念
- 圖像的讀取、顯示與保存
- 圖像直方圖的繪制
- 圖像通道以及通道的分離與合并
- 顏色空間及其互相轉換
以上是圖像與OpenCV的基礎知識。
###############################################################################
####################################分割線######################################
###############################################################################
這次筆記以及后兩次筆記將聚焦于圖像的基本操作,包括:
再次給出OpenCV官方給出的python版文檔:https://docs.opencv.org/4.1.2/d6/d00/tutorial_py_root.html
這次筆記所用到的部分文檔為:https://docs.opencv.org/4.1.2/dc/da5/tutorial_py_drawing_functions.html
一、OpenCV中的繪圖函數
1.1 線段繪制
函數:
img = cv2.line( img, pt1, pt2, color[, thickness[, lineType[, shift]]] )參數:
看一下例子:
import numpy as np import cv2# 創建一張黑色的背景圖 img=np.zeros((512,512,3), np.uint8) cv2.imshow("black", img) cv2.waitKey(0) cv2.destroyWindow("black") # 繪制一條線寬為5的線段,起點為(0,0),終點為(200,500),顏色為紅色 cv2.line(img,(0,0),(200,500),(0,0,255),5)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)輸出結果為:
注意:OpenCV中默認的色彩空間為BGR,所以color參數為(0,0,255)表示的是紅色。
1.2 矩形繪制
函數:
img = cv2.rectangle( img, pt1, pt2, color[, thickness[, lineType[, shift]]] )參數:
看個例子:
import numpy as np import cv2# 創建一張黑色的背景圖 img=np.zeros((512, 512, 3), np.uint8)# 畫一個黃色邊框的矩形,參數2:左上角坐標,參數3:右下角坐標 cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 255), 1)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)結果如下所示:
因為矩形是一個閉合的形狀,所以我們將 thickness 參數改成 -1,看一下效果:
它進行了填充操作,即繪制了一個實心的矩形。
1.3 圓繪制
函數:
img = cv2.circle( img, center, radius, color[, thickness[, lineType[, shift]]] )參數:
看個例子:
import numpy as np import cv2# 創建一張黑色的背景圖 img=np.zeros((512, 512, 3), np.uint8)# 畫一個填充紅色的圓,參數2:圓心坐標,參數3:半徑 cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)結果如下圖所示:
1.4 橢圓的繪制
函數:
img = cv2.ellipse( img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]] )參數:
看個例子:
import numpy as np import cv2# 創建一張黑色的背景圖 img = np.zeros((512, 512, 3), np.uint8)# 在圖中心畫一個填充的半圓 cv2.ellipse(img, (256, 256), (100, 50), 0, 30, 180, (255, 0, 0), -1)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)結果如下所示:
從這個結果也可以進一步知道,起始和結束角度都是按照順時針方向來算的。
1.5 多邊形繪制
函數:
img = cv2.polylines( img, pts, isClosed, color[, thickness[, lineType[, shift]]] )參數:
看個例子:
import numpy as np import cv2# 創建一張黑色的背景圖 img = np.zeros((512, 512, 3), np.uint8)# 定義四個頂點坐標 pts = np.array([[10, 5], [50, 10], [70, 20], [20, 30]]) print(pts) print(pts.shape) # 頂點個數:4,矩陣變成4*1*2維 pts = pts.reshape((-1, 1, 2)) print(pts) # 繪制橢圓 cv2.polylines(img, [pts], False, (0, 255, 255)) winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)這里需要將多邊形的點對統一為(-1, 1, 2)這種維度的形式,這里的-1是與點的個數相適應的,后面的1和2是表示每個點是有兩個坐標(x和y),然后再放入函數中,而且在函數中外面還需要再加上一個中括號使之是列表的形式。
結果如下所示:
[[10 5][50 10][70 20][20 30]] (4, 2) [[[10 5]][[50 10]][[70 20]][[20 30]]]
這是不閉合的情況,下面我們將False改為True,結果為:
1.6 添加文字
img = cv2.putText( img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]] )參數:
看個例子:
import numpy as np import cv2# 創建一張黑色的背景圖 img = np.zeros((512, 512, 3), np.uint8)# 添加文字“OpenCV”,起點(50,200) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img, 'OpenCV', (50,200), font, 3, (0, 255, 255), 5)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)結果如下所示:
以上就是OpenCV中最常用的繪圖函數,下次筆記介紹圖像的幾何縮放。
總結
以上是生活随笔為你收集整理的OpenCV与图像处理学习三——线段、矩形、圆、椭圆、多边形的绘制以及文字的添加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习之如何在物理机上安装Lin
- 下一篇: pytorch实现Dropout与正则化