第四节:创建图像,画线,画矩形,画圆,放置文本
- (一)创建图像( np.zeros)
- (二)画线(cv2.line)
- (三)画矩形(cv2.rectangle)
- (四)画圆(cv2.circle)
- (五)放置文本(cv2.putText)
- (六)备注
- (七)结语
(一)创建图像( np.zeros)
这里,你可以是理解为在创建画板(画布)
因为图像本身它就是矩阵,所以我们用numpy创建一个全黑的图像(画板)
上代码:
import cv2
import numpy as np
img = np.zeros((501,501,3),np.uint8)
#np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型,512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色
cv2.imshow("Image",img)
cv2.waitKey(0)
如果你不喜欢全黑的,那我们还可以该(改个全白的),这样方便对比
import cv2
import numpy as np
img = np.zeros((501,501,3),np.uint8)
#np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型,512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色
img[:]= 255,255,255
cv2.imshow("Image",img)
cv2.waitKey(0)
其中这个函数img[y1:y2,x1:x2]= 255,255,255 ,它表示改变图像中y1:y2,x1:x2的像素点颜色,后面的255,255,255为需要改变成的颜色,如果只有img[ : ],则表示改变整幅图像的所有像素点的颜色
import cv2
import numpy as np
img = np.zeros((501,501,3),np.uint8)
#np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型,512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色,如果没有这个3,则创建的是一幅灰度图
img[200:300,200:300]= 255,0,255#粉红色
cv2.imshow("Image",img)
cv2.waitKey(0)
(二)画线(cv2.line)
这里我们需要用到cv2.line(img,(0,0),(260,260),(255,0,0),5)
img表示为原图
(0,0) 表示为线的起始坐标
(260,260) 表示为线的终止坐标
(255,0,0) 表示显得颜色
5 表示线的厚度
当然这函数还可以设置线条的类型这里就不举例了
上代码
import cv2
import numpy as np
img = np.zeros((501,501,3),np.uint8)
#np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型,512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色
img[:]= 255,255,255
cv2.line(img,(0,0),(251,251),(0,255,0),3)#这里我们选择原谅色
cv2.imshow("Image",img)
cv2.waitKey(0)
(三)画矩形(cv2.rectangle)
这里我们需要cv2.rectangle()这个函数,它的参数与画线的函数相似
cv2.rectangle(image, 左上角坐标, 右下角坐标, color, 线条粗度),但它还有一个图像填充功能,你可以将线条厚度改为cv2.FILLED,这样它就会填充整个矩形的内部
import cv2
import numpy as np
img = np.zeros((501,501,3),np.uint8)
#np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型,512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色
img[:]= 255,255,255
cv2.rectangle(img,(0,0),(251,251),(0,255,0),3)#这里我们还是选择原谅色
cv2.imshow("Image",img)
cv2.waitKey(0)
我们试一下填充
import cv2
import numpy as np
img = np.zeros((501,501,3),np.uint8)
#np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型,512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色
img[:]= 255,255,255
cv2.rectangle(img,(0,0),(251,251),(0,255,0),cv2.FILLED)#这里我们还是选择原谅色
cv2.imshow("Image",img)
cv2.waitKey(0)
(四)画圆(cv2.circle)
这里我们需要使用cv2.circle()函数
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
img:输入的图片data
center:圆心位置
radius:圆的半径
color:圆的颜色
thickness:圆形轮廓的粗细(如果为正)。负厚度表示要绘制实心圆。
lineType: 圆边界的类型。
shift:中心坐标和半径值中的小数位数。
当然这里我们也可以将厚度改为cv2.FILLED来填充图片,其实我们还可以将厚度改为-1来填充图片
import cv2
import numpy as np
img = np.zeros((501,501,3),np.uint8)
#np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型,512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色
img[:]= 255,255,255
cv2.circle(img,(251,251),51,(0,255,0),3)#这里我们还是选择原谅色
cv2.imshow("Image",img)
cv2.waitKey(0)
(五)放置文本(cv2.putText)
这里需要使用到cv2.putText()函数
各参数依次是:图片,添加的文字,左上角坐标,字体类型,字体大小,颜色,字体粗细
import cv2
import numpy as np
img = np.zeros((501,501,3),np.uint8)
#np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型,512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色
img[:]= 255,255,255
cv2.putText(img," WDNMD ",(251,200),cv2.FONT_HERSHEY_COMPLEX,1,(0,150,0),3)#依旧还是选择原谅色,这里的WDNMD,纯属搞笑
cv2.imshow("Image",img)
cv2.waitKey(0)
(六)备注
其实我们还可以画椭圆,多边形等,由于时间现在我就不一一列举,读者可自行百度,不过我会放出函数接口
画椭圆:cv2.ellipse()
多边形:cv2.polylines()
(七)结语
学习opencv有很多的方法,我的建议是你可以加一些群,可以充分利用B站,CSDN,和百度。
在我的博客中,我不会讲解opencv的算法实现(当然我也不太会),我只会讲解一些函数的调用,不理解就多改一些参数,多尝试尝试,慢慢你就理解来。相信你总有一天可以说opencv不过“Ctrl+C,Crtl+V”
如果有什么错误的地方,还请大家批评指正,最后,希望小伙伴们都能有所收获。![在这里插入图片描述](