首页 > 其他分享 >【全网独家】OpenCV 绘制形状

【全网独家】OpenCV 绘制形状

时间:2024-07-22 12:27:54浏览次数:10  
标签:image 全网 cv2 OpenCV 图像 np 绘制 255

OpenCV 绘制形状

在本教程中,我们将深入探讨OpenCV的绘制形状功能,包括其概念、应用场景、原理解释以及如何实现这些操作。我们还会提供示例代码,展示如何进行部署和测试,并附上相关材料链接。最后,我们将对未来的展望做一个总结。

目录

  1. 什么是绘制形状
  2. 应用使用场景
  3. 原理解释
  4. 算法原理流程图
  5. 算法原理解释
  6. 应用场景代码示例实现
  7. 部署测试场景
  8. 材料链接
  9. 总结
  10. 未来展望

什么是绘制形状

绘制形状是指在图像上绘制基本几何图形,如线条、矩形、圆形、多边形和文本等。OpenCV 提供了一组丰富的函数来进行这些操作,可以轻松地在图像上添加各种标注或图形元素。

常见绘制形状方法

  • 线条(Lines)cv2.line()
  • 矩形(Rectangles)cv2.rectangle()
  • 圆形(Circles)cv2.circle()
  • 椭圆形(Ellipses)cv2.ellipse()
  • 多边形(Polygons)cv2.polylines()
  • 文本(Text)cv2.putText()

示例代码

import cv2
import numpy as np

image = np.zeros((512, 512, 3), dtype=np.uint8) # 创建一幅黑色图像

# 画线条
cv2.line(image, (0, 0), (511, 511), (255, 0, 0), 5)

# 画矩形
cv2.rectangle(image, (100, 100), (300, 300), (0, 255, 0), 3)

# 画圆形
cv2.circle(image, (256, 256), 100, (0, 0, 255), -1)

# 画椭圆形
cv2.ellipse(image, (256, 256), (100, 50), 0, 0, 180, (255, 255, 0), -1)

# 画多边形
points = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
points = points.reshape((-1, 1, 2))
cv2.polylines(image, [points], True, (0, 255, 255))

# 写文本
cv2.putText(image, 'OpenCV', (10, 500), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 2, cv2.LINE_AA)

cv2.imshow('Shapes', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

应用使用场景

绘制形状功能广泛应用于多个领域,包括但不限于:

  • 图像标注:对图像中特定区域进行标注,例如目标检测中的边界框。
  • 图像处理结果可视化:展示图像处理或分析的结果,例如特征点检测。
  • 用户界面设计:在图像或视频流上叠加UI元素,如按钮和进度条。
  • 教学演示:用于教育和培训目的,展示图像处理算法的效果。

原理解释

绘制形状通过在图像的指定位置修改像素值来实现。OpenCV 提供的绘制函数允许我们指定形状的类型、位置、大小、颜色和厚度等参数,从而灵活地在图像上添加各种几何图形和文本信息。

算法原理流程图

以下是绘制形状的基本流程图:

创建或读取图像
    |
选择绘制形状类型及参数
    |
调用相应绘制函数
    |
显示或保存图像

算法原理解释

  1. 创建或读取图像:可以创建一个空白图像或读取已有图像,以作为绘制形状的画布。
  2. 选择绘制形状类型及参数:根据实际需求选择要绘制的形状并设置相关参数,如起始点、终止点、半径、颜色等。
  3. 调用相应绘制函数:使用 OpenCV 提供的绘制函数,如cv2.line()cv2.rectangle()等,在图像上绘制指定的形状。
  4. 显示或保存图像:将绘制完形状的图像显示出来或保存到文件中,以便进一步处理或分析。

应用场景代码示例实现

示例一:绘制线条

import cv2
import numpy as np

def draw_line(image_path):
    # 创建一幅黑色图像
    image = np.zeros((512, 512, 3), dtype=np.uint8)

    # 画线条
    cv2.line(image, (0, 0), (511, 511), (255, 0, 0), 5)
    
    # 显示和保存处理后的图像
    cv2.imshow('Line', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite('line_image.jpg', image)

draw_line('path_to_image.jpg')

示例二:绘制矩形

import cv2
import numpy as np

def draw_rectangle(image_path):
    # 创建一幅黑色图像
    image = np.zeros((512, 512, 3), dtype=np.uint8)

    # 画矩形
    cv2.rectangle(image, (100, 100), (400, 400), (0, 255, 0), 3)
    
    # 显示和保存处理后的图像
    cv2.imshow('Rectangle', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite('rectangle_image.jpg', image)

draw_rectangle('path_to_image.jpg')

示例三:绘制圆形

import cv2
import numpy as np

def draw_circle(image_path):
    # 创建一幅黑色图像
    image = np.zeros((512, 512, 3), dtype=np.uint8)

    # 画圆形
    cv2.circle(image, (256, 256), 100, (0, 0, 255), -1)
    
    # 显示和保存处理后的图像
    cv2.imshow('Circle', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite('circle_image.jpg', image)

draw_circle('path_to_image.jpg')

示例四:绘制多边形

import cv2
import numpy as np

def draw_polygon(image_path):
    # 创建一幅黑色图像
    image = np.zeros((512, 512, 3), dtype=np.uint8)

    # 画多边形
    points = np.array([[100, 50], [200, 300], [700, 200], [500, 100]], np.int32)
    points = points.reshape((-1, 1, 2))
    cv2.polylines(image, [points], True, (0, 255, 255), 3)
    
    # 显示和保存处理后的图像
    cv2.imshow('Polygon', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite('polygon_image.jpg', image)

draw_polygon('path_to_image.jpg')

示例五:绘制文本

import cv2
import numpy as np

def draw_text(image_path):
    # 创建一幅黑色图像
    image = np.zeros((512, 512, 3), dtype=np.uint8)

    # 写文本
    cv2.putText(image, 'OpenCV', (10, 250), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 2, cv2.LINE_AA)
    
    # 显示和保存处理后的图像
    cv2.imshow('Text', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite('text_image.jpg', image)

draw_text('path_to_image.jpg')

部署测试场景

在实际项目中,可以将上述代码集成到Web应用或移动应用中,通过绘制形状功能实现图像标注和可视化。部署前需确保环境配置正确,并进行充分测试以保证系统稳定性和性能。

部署示例

可以使用Flask创建一个简单的Web接口来展示绘制形状功能:

from flask import Flask, render_template, request
import cv2
import numpy as np
import os
from werkzeug.utils import secure_filename

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    filename = secure_filename(file.filename)
    filepath = os.path.join('uploads', filename)
    file.save(filepath)

    # 读取图像
    image = cv2.imread(filepath)
    
    # 在图像上绘制示例形状
    cv2.line(image, (0, 0), (511, 511), (255, 0, 0), 5)
    cv2.rectangle(image, (100, 100), (400, 400), (0, 255, 0), 3)
    cv2.circle(image, (256, 256), 100, (0, 0, 255), -1)
    points = np.array([[100, 50], [200, 300], [700, 200], [500, 100]], np.int32)
    points = points.reshape((-1, 1, 2))
    cv2.polylines(image, [points], True, (0, 255, 255), 3)
    cv2.putText(image, 'OpenCV', (10, 250), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 2, cv2.LINE_AA)
    
    # 保存处理后的图像
    output_path = os.path.join('processed', 'shape_' + filename)
    cv2.imwrite(output_path, image)
    
    return f"Image processed and saved at {output_path}"

if __name__ == '__main__':
    app.run(debug=True)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload Image</title>
</head>
<body>
    <h1>Upload Image</h1>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <button type="submit">Upload</button>
    </form>
</body>
</html>

材料链接

以下是一些有用的资料链接:

总结

本文详细介绍了OpenCV的绘制形状功能,包括线条、矩形、圆形、多边形和文本等常见方法。通过示例代码展示了如何在实际项目中实现这些功能,并提供了一个简单的Web应用接口来部署绘制形状功能。

未来展望

随着计算机视觉技术的发展,绘制形状功能的应用将更加广泛和深入。特别是在标注、可视化以及用户界面设计等领域,绘制形状技术可以显著提高系统的交互性和易用性。未来可能会看到更多基于绘制形状的高级应用,结合深度学习和人工智能技术进一步提升图像处理效果和效率。

标签:image,全网,cv2,OpenCV,图像,np,绘制,255
From: https://blog.csdn.net/feng1790291543/article/details/140403861

相关文章

  • YOLOv10全网最新创新点改进系列:YOLOv10改进ShuffleNetV2,手把手教学、保姆级实操、必须
    YOLOv10全网最新创新点改进系列:YOLOv10改进ShuffleNetV2,手把手教学、保姆级实操、必须有效涨点!!!所有改进代码均经过实验测试跑通!截止发稿时YOLOv10已改进40+!自己排列组合2-4种后,考虑位置不同后可排列组合上千万种!改进不重样!!专注AI学术,关注B站up主:Ai学术叫叫兽er!购买相关资......
  • OpenCV 遍历Mat,像素操作,使用TrackBar 调整图像的亮度和对比度 C++实现
    文章目录1.使用C++遍历Mat,完成颜色反转1.1常规遍历方式1.2迭代器遍历方式1.3指针访问方式遍历(最快)1.4不同遍历方式的时间对比2.图像像素操作,提高图像的亮度3.TrackBar进度条操作3.1使用TrackBar调整图像的亮度3.2使用TrackBar调整图像的对比度1.使用C++遍历M......
  • YOLOv10改进 | 独家创新- 注意力篇 | YOLOv10引入结合SimAM和SKAttention形成全新的SK
    1.SKAM介绍     SKAM(SimAMandSKAttentionModule)注意力机制结合了SimAM和SKAttention的优点,能够在图像特征提取中表现出更为优异的性能。     SimAM注意力机制     SimAM(SimplifiedAttentionModule)是一种简单但有效的注意力机制,旨在增强......
  • YOLOv10改进 | 独家创新- 注意力篇 | YOLOv10引入结合EMAttention和NAMAttention形成
    1. EAMA注意力机制     EAMA注意力模块比NAMAttention和EMAttention在图像特征提取方面更强,其优势主要体现在以下几个方面:     (1).综合利用通道和空间信息:     EAMA结合了EMAttention和NAMAttention两种注意力机制,充分利用了通道和空间信......
  • 苦学Opencv的第七天:图像的阈值处理
    PythonOpenCV入门到精通学习日记:图像的阈值处理前言阈值是图像处理中很重要的一个概念,类似于一个标准线。所有像素值都去和这条“标准线”进行比较,会得到大于,小于,等于三种不同的结果,程序对这三种结果进行分组,然后分别对不同组的像素进行“加深”或“变淡”的操作,让整个图......
  • Libtorch与QTOpenCV 和 Point Cloud Library 一起使用时出现错误
    我正在尝试在项目中使用libtorch、qt小部件、点云库(pcl)和opencv。对于这个项目,我使用的是cmake列表。问题是当我同时使用所有四个库时,libtorch会抛出错误。如果我使用libtorch、opencv和qt,一切正常,如果我使用pclqt和opencv,一切也都很好。我得到的错误列在下面:/libto......
  • 使用Python的Turtle库绘制中国火箭模型,点燃航天梦!
    引言在编程教育中,turtle模块是一个非常受欢迎的图形化编程工具,尤其适合初学者学习和实践。它允许我们通过控制一个可以在屏幕上移动的“小乌龟”来绘制各种形状和图案,从而让编程变得直观且有趣。Turtle库简介turtle是Python标准库的一部分,它提供了一个简单而强大的绘图环......
  • Windows下使用QT+OpenCV完成人脸检测(获取摄像头数据进行检测)
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)Windows下使用QT+OpenCV完成人脸检测(获取摄像头数据进行检测)1.简介本文......
  • Python按条件筛选、剔除表格数据并绘制剔除前后的直方图
      本文介绍基于Python语言,读取Excel表格文件数据,以其中某一列数据的值为标准,对于这一列数据处于指定范围的所有行,再用其他几列数据的数值,加以数据筛选与剔除;同时,对筛选前、后的数据分别绘制若干直方图,并将结果数据导出保存为一个新的Excel表格文件的方法。  首先,我们来明确一......
  • 苦学Opencv的第六天:图像的几何变换
    PythonOpenCV入门到精通学习日记:图像的几何变换前言几何变换,顾名思义就是修改图像的几何结构,例如大小,角度和形状等等,让图像呈现不同的效果。这些几何变换的操作一般都涉及复杂且精密的计算,Opencv将这些计算过程全部都包装成了各种灵活的方法,我们只需要修改一些参数,就能实......