OpenMV学习笔记3——画图函数汇总

画图,即在摄像头对应位置画出图形,对于需要反馈信息的程序来说很直观。就如上一篇文章颜色识别当中的例子一样,我们在识别出的色块上画出矩形方框,并在中间标出十字,可以直观的看到OpenMV现在识别出的色块。

目录

一、画线

二、画框

三、画圆 

四、画十字

 五、写字

 六、一起来!


一、画线

函数原型:image.draw_line(line_tuple,color=White)。

效果为在捕获的图像上画一条直线。

  • line_tuple格式为(x0,y0,x1,y1),代表从(x0,y0)到(x1,y1)的直线。
  • 颜色可以是灰度值(0~255),也可以是(r,g,b)格式的元组,默认是白色。

 例:

img.draw_line((10,10,20,30), color=(255,0,0))

运行结果:

 

二、画框

函数原型:image.draw_rectangle(rect_tuple,color=White)

效果为在图像中画一个矩形框。

  • rect_tuple的格式是(x,y,w,h)。分别代表矩形框左上角的x,y坐标,以及长和宽。

例:

img.draw_rectangle((0, 0, 41, 51), color=(255,0,0))

运行结果:

 

三、画圆 

 函数原型:image.draw_circle(x,y,radius,color=White)

效果为在图像中画一个圆。

  • x,y是圆心坐标。
  • radius是圆的半径。

 例:

img.draw_circle(50, 50, 30)

运行结果:

 

四、画十字

函数原型:image.draw_cross(x,y,size=5,color=White)

效果为在图像中画一个十字

  • x,y是十字交点坐标。
  • size是两侧的尺寸。

例:

img.draw_cross(90,60,size=10)

运行结果:

 五、写字

函数原型:image.draw_string(x,y,text,color=White)

效果为在图像中写字,8×10的像素。

  • x,y是坐标。使用\n,\r and \r\n会使光标移动到下一行。
  • text是要写的字符串。

例:

img.draw_string(10,10, "hello world!")

 运行结果:

注:所有函数里的color可以不写,不写默认是白色,如果要指定颜色的话,必须在函数参数里标明color=。

 六、一起来!

代码:

import sensor, image, time

sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(10) # 跳过10帧,使新设置生效
while(True):
    img = sensor.snapshot()         # Take a picture and return the image.
    img.draw_line((10,10,40,40), color=(255,0,0))
    img.draw_rectangle((0, 0, 41, 51), color=(255,0,0))
    img.draw_circle(50, 50, 30)
    img.draw_cross(90,60,size=10)
    img.draw_string(10,10, "hello world!")

运行结果:

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32 标准库 将结构中6个不同的数据与之后更新的这六个数据进行对比,如果不同则标志位++并保存之前的数据在结构体数组中, 但是没有将USART3中的数据传给要检测是否一样的数据,请修改void Openmv_RXtask(void) { if((Openmv_Flag == 1)&&(USART3_RX_BUF[3]!=0 )) { Openmv.Color_Num = USART3_RX_BUF[2]; Openmv.Shape_Num = USART3_RX_BUF[3]; Openmv.Openmv_X = USART3_RX_BUF[4] | USART3_RX_BUF[5] <<8; Openmv.Openmv_Y = USART3_RX_BUF[6] | USART3_RX_BUF[7] <<8; Openmv.Openmv_W = USART3_RX_BUF[8] | USART3_RX_BUF[9] <<8; Openmv.Openmv_H = USART3_RX_BUF[10]| USART3_RX_BUF[11]<<8; Openmv_Flag = 0; USART3_RX_STA = 0; // printf("%d\r\n",Openmv.Shape_Num); //USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); } }inline void checkAndUpdate(Openmv_InitTypeDef *myStruct) { printf("没进来了\r\n"); static uint16_t prevData1, prevData2, prevData3, prevData4, prevData5, prevData6; printf("%d\r\n",prevData1); if (myStruct->Color_Num != prevData1 || myStruct->Shape_Num != prevData2 || myStruct->Openmv_X != prevData3 || myStruct->Openmv_Y != prevData4 || myStruct->Openmv_W != prevData5 || myStruct->Openmv_H != prevData6) { printf("进来了\r\n"); OpenmvArray[myStruct->flag] = *myStruct; myStruct->flag++; // 保存之前的数据到结构体数组中 prevData1 = myStruct->Color_Num; prevData2 = myStruct->Shape_Num; prevData3 = myStruct->Openmv_X; prevData4 = myStruct->Openmv_Y; prevData5 = myStruct->Openmv_W; prevData6 = myStruct->Openmv_H; } }
06-03
你需要把 USART3 接收到的数据传递给 checkAndUpdate 函数进行比较。修改后的代码如下: ``` void Openmv_RXtask(void) { if((Openmv_Flag == 1)&&(USART3_RX_STA & 0x8000)) { Openmv.Color_Num = USART3_RX_BUF[2]; Openmv.Shape_Num = USART3_RX_BUF[3]; Openmv.Openmv_X = USART3_RX_BUF[4] | USART3_RX_BUF[5] <<8; Openmv.Openmv_Y = USART3_RX_BUF[6] | USART3_RX_BUF[7] <<8; Openmv.Openmv_W = USART3_RX_BUF[8] | USART3_RX_BUF[9] <<8; Openmv.Openmv_H = USART3_RX_BUF[10]| USART3_RX_BUF[11]<<8; Openmv_Flag = 0; USART3_RX_STA = 0; checkAndUpdate(&Openmv); // 将结构体传递给 checkAndUpdate 函数进行比较 } } inline void checkAndUpdate(Openmv_InitTypeDef *myStruct) { static uint16_t prevData1, prevData2, prevData3, prevData4, prevData5, prevData6; if (myStruct->Color_Num != prevData1 || myStruct->Shape_Num != prevData2 || myStruct->Openmv_X != prevData3 || myStruct->Openmv_Y != prevData4 || myStruct->Openmv_W != prevData5 || myStruct->Openmv_H != prevData6) { OpenmvArray[myStruct->flag] = *myStruct; myStruct->flag++; prevData1 = myStruct->Color_Num; prevData2 = myStruct->Shape_Num; prevData3 = myStruct->Openmv_X; prevData4 = myStruct->Openmv_Y; prevData5 = myStruct->Openmv_W; prevData6 = myStruct->Openmv_H; } } ``` 修改后的代码中,我们增加了一个判断 USART3_RX_STA 是否为接收完成标志位的判断,只有当接收完成后才会进行处理。同时,在 Openmv_RXtask 函数中,我们将结构体传递给 checkAndUpdate 函数进行比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风痕天际

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值