版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元3绘制图形OpenCV数字图像处理目录/CONENTS准备画笔和画布绘直线和矩形绘圆和椭圆弧绘多边形、文字和标记01020304准备画笔和画布01创建二维矩阵设置矩阵元素类型使用np.zeros()或np.ones(),设定行数、列数与通道数,创建全0或全1的矩阵。通过dtype参数设置数据类型为"uint8",取值范围0-255,适用于图像像素。准备画布#Example3_1importcv2importnumpy
asnpc=np.zeros((200,300),dtype
="uint8")cv2.imshow("0",c)cv2.waitKey(0)Example3_1创建一个200行300列像素的全是0的二维矩阵,运行以后显示一个黑色的画布dtype取值范围:创建三维矩阵创建灰度图像对np.ones()创建的200行256列矩阵,通过for循环为每列赋值,展示不同灰度等级。课堂练习:扩展到三维矩阵,初始化所有元素为0,修改特定通道的列像素值,观察颜色变化。准备画布#Example3_2importnumpy
asnpimportcv2c=np.ones((200,256),dtype
="uint8")foriinrange(256):
c[:,i]=i
#对每列切片重新赋值cv2.imshow("1",c)cv2.waitKey(0)cv2.destroyAllWindows()通过RGB三元组表示,每个通道值0-255,可组合出16,777,216种颜色。定义画笔颜色设置画笔颜色课堂练习:1.显示一个300*500的红色画布图像2.显示一个400*500的白色画布图像,正中间显示一块50*50的蓝色窗口3.显示一个400*600的黑色画布图像,正中间显示一块40*60的黄色窗口设置画笔颜色#Example3_3importnumpy
asnpimport
randomimportcv2c=np.ones((100,150,3),dtype
="uint8")c=c*255foriinrange(200):
x=random.randint(0,99)
y=random.randint(0,149)
c[x,y]=(0,0,255)
#用三元组表示颜色cv2.imshow("1",c)cv2.waitKey(0)cv2.destroyAllWindows()定义好画笔颜色,就可以把图像中某个像素或每个区域设置为这种颜色。程序Example3_3在白色图像中的随机位置添加了100
个红色噪声点使用三元组,将图像中心区域指定范围设置为白色(255,255,255)。修改图像颜色设置画笔颜色#Example3_4importcv2image=cv2.imread('imgs/flower.png')h,w,_=image.shapehc,wc=h//2,w//2
#图像中心行号和列号image[hc-50:hc+50,wc-60:wc+60]=(255,255,255)
#三元组表示白色cv2.imshow("Image",image)cv2.waitKey(0)绘直线和矩形02像素位置由二维坐标定义,X轴向右,Y轴向下,坐标原点在左上角,(0,0)表示左上角像素。图像像素坐标系统01坐标表示法02每个像素由二元组表示,X坐标先,然后是Y坐标,如右下角像素坐标为(7,5),与NumPy矩阵索引顺序相反。像素坐标在NumPy矩阵中,元素索引行在前,列在后,如右下角元素索引为img[5,7],但其图像坐标为(7,5)NumPy矩阵与图像坐标像素坐标使用img
=cv2.imread()读取上图表示的二维灰度图像,返回的NumPy矩阵,右下角元素的索引是:img[5,7],行号在前,列号在后。而这一像素在图像平面的坐标是(7,5)像素坐标
课堂练习:下图是一幅分辨率为4行5列图像示意图,请写出A,B,C,D四个像素的坐标可以使用NumPy索引访问并修改像素值,如代码所示打印和修改像素值,注意坐标与索引顺序差异坐标与像素值操作像素坐标例如,下列代码使用NumPy索引分别打印上页图中右下角元素的像素值以及对这个像素重新赋值:print(img[5,7])img[5,7]=255OpenCV绘制图形使用像素的坐标定位坐标X和Y的顺序与NumPy引用矩阵元素的行列序号相反cv2.line(img,pt1,pt2,color,thickness=1,lineType=cv2.LINE_8,shift=0)
img:图像矩阵。
pt1:二元组,起点的坐标。
pt2:二元组,终点的坐标。
color:三元组,画笔颜色。
thickness:可选参数,指出画笔粗细,默认值是1。
lineType:枚举常量,指出线条类型,取值见表。shift:可选参数,指出起点和终点坐标中小数的位数参数详解:绘直线绘直线#Example3_5importnumpy
asnpimportcv2img
=np.ones((300,500,3),dtype="uint8")*255cv2.line(img,(100,100),(400,200),(255,0,0),2)cv2.imshow("line",img)cv2.waitKey(0)cv2.destroyAllWindows()课堂练习:1.黑色画布上绘制三条红色直线,首尾相连,组成一个三角形,运行结果见图2.在黑色画布上绘制一个正方形rectangle()函数详解:绘矩形cv2.rectangle(img,pt1,pt2,color,thickness=1,lineType=cv2.LINE_8,shift=0)img:图像矩阵。pt1:二元组,对角线上一个顶点的坐标。pt2:二元组,对角线上另一个点的坐标。color:三元组,画笔颜色。thickness:可选参数,指出画笔粗细,这个参数为负数时,绘填充矩形。lineType:线条类型枚举常量shift:可选参数,指出起点和终点坐标中小数的位数
绘矩形importnumpy
asnpimportcv2img
=np.zeros((300,500,3),dtype="uint8")cv2.rectangle(img,(20,10),(200,100),(255,255,0),2)#cv2.rectangle(img,(20,10),(200,100),(255,255,0),-2)cv2.imshow("1",img)cv2.waitKey(0)cv2.destroyAllWindows()课堂练习:
绘矩形和填充矩形课堂练习:绘制如图所示图案绘矩形课堂练习新建颜色为红,黄,绿的三个画布图像,并显示出来在白色背景的画布图像上一条直线,从图像的最左下角到右上角在黄色背景的画布图像上最中间画高为100,宽为200的一个矩形绘圆和椭圆弧03绘圆cv2.circle(img,center,radius,color,thickness
=1,lineType
=cv2.LINE_8,shift
=0)img:
图像矩阵。center:二元组,表示圆心坐标。radius:
圆的半径。color:三元组,画笔颜色。thickness:可选参数,指出画笔粗细,如果这个参数是负数,则绘实心圆importnumpyasnpimportcv2img=np.zeros((300,500,3),dtype="uint8")cv2.circle(img,(250,150),100,(255,255,255),2)#cv2.circle(img,(250,150),100,(255,255,255),-10)
cv2.imshow("1",img)cv2.waitKey(0)cv2.destroyAllWindows()
课堂练习:通过调整圆的半径、颜色和是否填充,可以组合绘制出如飞镖标靶、奥运五环等复杂图案。组合圆绘制复杂图案绘圆绘椭圆弧cv2.ellipse(img,center,axes,angle,start,endAngle,color,thickness
=1,lineType
=cv2.LINE_8,shift
=0)img:图像矩阵。center:二元组,椭圆圆心坐标。axes:二元组,椭圆的长轴和短轴。angle:椭圆的倾斜角。startAngle:椭圆弧的开始角。endAngle:椭圆弧的结束角。函数详解:绘制椭圆绘椭圆弧#Example3_9importnumpy
asnpimportcv2img
=np.zeros((300,500,3),dtype="uint8")cv2.ellipse(img,(250,150),(200,100),0,90,360,(255,255,255),4)#cv2.ellipse(img,(250,150),(200,100),0,90,360,(255,255,255),-4)#cv2.ellipse(img,(250,150),(200,100),30,90,360,(255,255,255),-4)cv2.imshow("1",img)cv2.waitKey(0)cv2.destroyAllWindows()绘多边形、文字和标记04多边形绘制函数绘多边形cv2.polylines(img,pts,isClosed,color,thickness
=1,lineType
=cv2.LINE_8,shift
=0)img:画布图像。pts:NumPy二维矩阵,多边形各个顶点的坐标。isClosed:指定多边形是否封闭,即是否自动连接终点和起点。color:三元组,画笔颜色。thickness:画笔粗细,默认值是1个像素importnumpy
asnpimportcv2img
=np.zeros((300,500,3),dtype="uint8")pts=np.array([[50,25],[50,100],[250,280],[320,240],[300,70]])cv2.polylines
(img,[pts],True,(255,255,0))#cv2.polylines(img,[pts],False,(255,255,0),thickness=4)cv2.imshow("1",img)cv2.waitKey(0)cv2.destroyAllWindows()cv2.putText(img,text,org,fontFace,fontScale,color,thickness=1,lineType=cv2.LINE_8,bottomLeftOrigin=false)绘文字函数:绘文字
img:图像矩阵。
text:字符串,要绘制的文字。
org:二元组,文字区域的左下角在图像平面中的坐标。
fontFace:枚举常量,指定用于设置文字字体,可取的常数参见下表
fontScale:用于设置文字大小。
color:文字颜色。thickness:文字粗细绘文字绘文字importnumpy
asnpimportcv2img
=np.zeros((300,600,3),dtype="uint8")cv2.putText
(img,'Helloworld!',(80,150),cv2.FONT_HERSHEY_SIMPLEX,2.5,(0,255,255),8)cv2.imshow("1",img)cv2.waitKey(0)cv2.destroyAllWindows()OpenCV本身并不直接支持绘制汉字Python的PIL(PythonImagingLibrary,Python图像处理库)是一个强大的图像处理库pillow是PIL的分支,现在通常使用pillow而不是原始的PILpillow的ImageDraw.Draw.text()函数,在图像上绘制文本,包括汉字为了绘制汉字,需要指定支持汉字的字体文件,如.ttf或.ttc文件绘汉字绘汉字#在图像上写汉字importcv2fromPILimportImage,ImageDraw,ImageFontimportnumpy
asnpimg
=np.zeros((300,500,3),dtype=np.uint8)#画布转换为PILImageimg_pil
=Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))#创建画笔draw=ImageDraw.Draw(img_pil)#加载字体font=ImageFont.truetype("font\SimHei.ttf",30)draw.text((50,100),"你好,图像处理工具OpenCV!",font=font,fill=(255,0,0))img
=cv2.cvtColor(np.array(img_pil),cv2.COLOR_RGB2BGR)cv2.imshow('result',img)cv2.waitKey(0)绘标记cv2.putText(img,text,org,fontFace,fontScale,color,thickness=1,lineType=cv2.LINE_8,bottomLeftOrigin=false)绘标记函数:
img:
图像矩阵。
position:
二元组表示的标记位置坐标。
color:三元组表示的画笔颜色。
markerType:枚举常量,指定标记类型,参见表3-4。markerSize:标记大小绘标记importnumpy
asnpimportcv2img
=np.zeros((300,500,3),dtype="uint8")cv2.circle(img,(100,150),50,(255,255,255),2)cv2.drawMarker(img,(100,150),(255,255,255))
#在圆心绘默认十字标记cv2.rectangle(img,(200,100),(400,200),(255,255,255))cv2.drawMarker(img,(200,100),(0,0,255),cv2.MARKER_STAR)cv2.drawMarker(img,(200,200),(255,255,0),cv2.MARKER_DIAMOND)cv2.drawMarker(img,(400,100),(0,255,255),cv2.MARKER_SQUARE)cv2.drawMarker(img,(400,200),(255,0,255),cv2.MARKER_TRIANGLE_UP)cv2.imshow("1",img)cv2.waitKey(0)cv2.destroyAllWindows()用于在图像上绘制标记,参数包括图像矩阵、位置坐标、颜色、标记类型、大小等,可自定义多种形状的标记。OpenCVdrawMarker详解展示如何在圆心和矩形角点绘制不同类型的标记,包括十字、星型、菱形、方形、三角形,代码中详细注释了各参数含义。示例代码解析绘标记拓展阅读05cv2.setMouseCallback()用于在图像窗口上设置鼠标事件回调函数cv2.setMouseCallback(winname,onMouse,userdata=None)
winname:窗口名。
onMouse:回调函数函数名,操作鼠标时就会自动调用这个函数。
userdata:可选参数,传到回调函数的参数。OpenCV图像处理回调函数格式如下:defonMouse(event,x,y,flags,param):#处理鼠标事件的代码pass其中,
event:枚举常量,指定鼠标事件,表示执行的是何种鼠标操作,常用取值见表
x:鼠标位置X坐标。
y:鼠标位置Y坐标。
flags:鼠标事件标识常量,可以是上述事件类型的组合。userdata:可选参数,用户传递给cv2.setMouseCallback()的自定义参数OpenCV图像处理显示一个黑色窗口,窗口中点击鼠标,将在鼠标位置绘制一个实心圆importcv2importnumpyasnp#创建一个黑色图像img=np.zeros((300,400,3),np.uint8)dWindow('image')#鼠标回调函数defdraw_circle(event,x,y,flags,param):ifevent==cv2.EVENT_LBUTTONDOWN:cv2.circle(img,(x,y),100,(0,255,0),-1)#
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省大湾区2024-2025学年高一年级下册期末统一测试英语试题(解析版)
- 产品质量法石河子大学李卫芳
- 岩土工程分析评价与勘察报告
- 针纺织品公司资金结算员述职报告
- 2026年数据备份恢复实操管理培训试卷及答案
- 2026年农村客运便民服务管理培训试卷及答案
- 2026年公路视频监控值守培训题库(含答案)
- 《蒹葭》获奖课件知识分享
- 新生儿疾病总结2026
- 公立医院专科运营助理推行不下去问题总结2026
- 美国白宫 科学:一个新的黄金时代 致总统的报告
- 2026新教材语文 1.习作一:猜猜他是谁三年级语文上册
- 2026秋初中人教版物理八年级上册(新教材)教学计划含教学进度表
- 内蒙古地质矿产集团考试真题及解析
- (正式版)DB50∕T 1915-2025 《电动重型货车大功率充电站建设技术规范》
- QGDW11970.7-2023输变电工程水土保持技术规程第7部分水土保持设施质量检验及评定
- 肾上腺疾病外科治疗
- 凝聚态物理专题课件
- 检验检测机构内审检查表
- 部编版三年级上册道德与法治-全册教案
- 七年级新生入学家长会---正式稿
评论
0/150
提交评论