首页 > 其他分享 >用OpenCV画简单图形以及绘制栅格地图

用OpenCV画简单图形以及绘制栅格地图

时间:2024-08-30 18:52:49浏览次数:5  
标签:img OpenCV cv2 栅格 np import 100 绘制 255

目录

前言

一、用函数绘制简单图形

1.画直线

2.画矩形

3.画圆形

二、绘制栅格地图


前言

        要完成opencv绘制栅格地图,需要具备的基础知识:opencv相关函数的简单使用(包括简单图形和网格的绘制)

一、用函数绘制简单图形

import cv2
import numpy as np

import cv2:导入OpenCV库,这个库提供了很多图像处理和计算机视觉方面的功能

import numpy as np:导入numpy库,并简称为npnumpy是一个用于科学计算的Python库,它提供了多维数组对象和相应的操作。

1.画直线

img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)

#显示图像
cv2.imshow('Line', img)
cv2.waitKey(0)
  1. img = np.zeros((512, 512, 3), dtype=np.uint8):创建一个大小为512x512像素的三维数组,其中每个像素由三个颜色通道(红、绿、蓝)组成。dtype=np.uint8表示数组的数据类型是无符号8位整数,这是图像处理中常用的数据类型,范围从0到255。

  2. cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5):使用OpenCVline函数在图像上绘制一条线。这条线的起点是(0, 0),即图像的左上角,终点是(511, 511),即图像的右下角。(255, 0, 0)是线条的颜色,表示蓝色。最后一个参数5是线条的粗细。

PS:在OpenCV中,颜色的表示方式是BGR(蓝-绿-红),而不是常见的RGB(红-绿-蓝)。所以,当你使用(255, 0, 0)这个颜色值时,实际上你绘制的是一条蓝色的线,因为255代表蓝色通道的最大强度,而红色和绿色通道的强度都是0。(具体数值可以查询BGR颜色对照表) 

       3.cv2.imshow('Line', img):使用OpenCVimshow函数将图像显示在窗口中。窗口的标题是'Line',img是要显示的图像。

       4.cv2.waitKey(0)waitKey函数使程序暂停,等待用户按键。参数0表示无限期地等待一个按键。这个函数通常用来在显示图像后让用户有时间查看图像,直到按下任意键。

完整的代码如下:

import cv2
import numpy as np

img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)

#显示图像
cv2.imshow('Line', img)
cv2.waitKey(0)

运行结果如图1:

图1

2.画矩形

在已经学习了直线的绘制后矩形的绘制就更简单了,直接把上述代码中的

cv2.line() 改成cv2.rectangle() ; 

cv2.imshow('Line', img) 改成cv2.imshow('Rectangle', img)

怎么样,是不是很简单?

这里需要注意一下,矩形的左上角和右下角的两个点的坐标通过下列式子中的两个括号来表示:(比如这里是从(100,100)到(300,300))。

cv2.rectangle(img, (100, 100), (300, 300), (255, 0, 0), 5)

最后输出的图形如图2:

图2
图2
图3

 

 如果想变成实心矩形,则将上述代码最后的5改成负数即可,如图3。

完整代码如下:

import cv2
import numpy as np

img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.rectangle(img, (100, 100), (300, 300), (255, 0, 0), -5) #实心矩形
#cv2.rectangle(img, (100, 100), (300, 300), (255, 0, 0), 5)  #空心矩形
#显示图像
cv2.imshow('Rectangle', img)
cv2.waitKey(0)

3.画圆形

同理,只需要将绘制矩形的代码替换成圆形即可:

import cv2
import numpy as np

img = np.zeros((512, 512, 3), dtype=np.uint8)
#cv2.circle(img, (375 , 275), 100, (255, 0, 255), -2)#实心圆
cv2.circle(img, (375 , 275), 100, (255, 0, 255), 2)#空心圆
#显示图像
cv2.imshow('circle', img)
cv2.waitKey(0)

其中(375,275)表示圆心坐标,100表示半径,(255,0,255)表示颜色,2表示粗细。

输出图形分别如下:

图4
图5

 

二、绘制栅格地图

import cv2
import numpy as np

#画出画布,方框
# 定义图像的大小
img_size = 200  #总像素数
grid_size = 20  #每个栅格边长所占的像素数
# 创建白色背景的图像
img = np.ones((img_size, img_size, 3), np.uint8) * 255
# 绘制网格
for x in range(0, img_size, grid_size):
    for y in range(0, img_size, grid_size):
        # 绘制每个方框的边框
        cv2.rectangle(img, (x, y), (x + grid_size, y + grid_size), (0, 0, 0), 1)
#显示图像
cv2.imshow('rectangle',img)
cv2.waitKey()
#将图像以图片的形式保存下来
# 保存图像的文件路径
save_path = 'shangeditu.png'
# 保存图像
cv2.imwrite(save_path, img)
print(f"图像已保存至:{save_path}")

这里绘制了一个10*10格的栅格地图(每个格子的长度是20个像素),采用的是白底黑线。将绘制的栅格地图保存下来,方便后续的调用 。

如果想在栅格中添加黑色障碍物,可以在画布上绘出黑色实心矩形。在绘制网格之前添加如下代码:

#增加黑色障碍物
cv2.rectangle(img,(60,60),(120,100),(0,0,0),-1

后续我会写一个关于在栅格地图中实现A*算法(python)的文章,想了解的小伙伴欢迎前来!

(如果写的哪里不对的,也非常希望大佬们能指出来,支持一下新人hh~)

标签:img,OpenCV,cv2,栅格,np,import,100,绘制,255
From: https://blog.csdn.net/2301_76360523/article/details/141719664

相关文章

  • 结构开发笔记(六):solidworks软件(五):绘制M2x3.0mm螺丝
    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141499374长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…硬件相关开发......
  • 用Python绘制历史K线数据
    历史K线数据是指股票或指数在特定时间段内的价格变化记录,通常包括开盘价、最高价、最低价、收盘价以及成交量等信息。K线图是一种常用的图形表示方法,用于描述股票市场的价格波动,它由一系列的柱状图组成,每个柱状图(也就是一根K线)代表了一定时间周期内的价格变化情况。一:历史K......
  • Opencv第五章——几何变换
    1. 缩放我们可以通过OpenCV提供的resize()方法实现随意更改图像的大小比例,语法格式如下:dst=cv2.resize(src,dsize,fx,fy,interpolation)参数说明:src:原始图像dsize:输出图像的大小,格式为(宽,高),单位为像素fx:可选参数,水平方向上缩放比例fy:可选参数,竖直方向......
  • opencv开发环境搭建
    从github下载opencv最新源码https://github.com/opencv/opencv,目前最新是5e93c8202363a13fc72df30f8c14069c5ab66e42.Ubuntu环境下编译安装依赖库:sudoapt-getinstallbuild-essentialsudoapt-getinstallcmakegitlibgtk2.0-devpkg-configlibavcodec-devliba......
  • OpenCV(cv::findChessboardCorners())
    目录1.函数原型2.使用场景3.工作原理4.示例4.1角点精细化4.2附加标志5.注意事项cv::findChessboardCorners()是OpenCV提供的一个函数,常用于计算机视觉中的棋盘图像角点检测,特别是相机标定(calibration)和三维重建相关的任务中。1.函数原型boolcv::findChessboard......
  • cesium 绘制贴地文字
    cesium绘制贴地文字更多内容/样例cesium实战目录示例代码<htmllang=......
  • OpenCV(cv::normalize())
    目录1.函数原型:2.使用场景:3.示例:cv::normalize()是OpenCV中用于将数据值缩放到指定范围或对数据进行归一化处理。1.函数原型:voidcv::normalize(InputArraysrc,OutputArraydst,doublealpha=1,doublebeta=0,intnorm_type=NORM_L2,intdtype=-1,I......
  • OpenCV(cv::dft())
    目录1.函数定义2.示例3.使用场景4.注意事项5.总结cv::dft()是OpenCV中用于计算离散傅里叶变换(DFT)的函数。傅里叶变换是一种重要的数学工具,用于将信号从时域转换到频域。这在图像处理和信号处理领域非常有用,例如滤波、卷积、图像频率分析等。1.函数定义voidcv::......
  • OpenCV(cv::mulSpectrums())
    目录1.函数定义2.工作原理3.示例4.典型应用5.总结cv::mulSpectrums()是OpenCV中用于频域信号处理的一个函数,它可以将两个频域的傅里叶变换结果相乘。通常用于频域滤波、卷积、相关性计算等任务。1.函数定义voidcv::mulSpectrums(InputArraya,InputArrayb,Out......
  • OpenCV(cv::idft())
    目录1.函数2.示例3.应用场景4.注意事项5.总结cv::idft()是OpenCV中用于计算逆离散傅里叶变换(IDFT)的函数,它将频域的数据转换回时域。它常与cv::dft()配合使用,例如在进行频域滤波后,需要使用cv::idft()将处理后的数据转换回图像的空间域。1.函数voidcv::idft(......