首页 > 其他分享 >【全网独家】OpenCV基本结构(Point、Size、Rect等)

【全网独家】OpenCV基本结构(Point、Size、Rect等)

时间:2024-09-03 10:54:28浏览次数:11  
标签:Point image cv2 OpenCV 图像 Rect Size

1. 简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它提供了上千种图像处理和计算机视觉算法,广泛应用在各种领域,如机器人学、实时图像处理、模式识别等。

2. 基本结构介绍

Point

Point用于表示图像中的二维点。可以用Point_<T>模板类来定义不同类型的坐标。

// 定义一个整型点
cv::Point point1(10, 20);

// 定义一个浮点型点
cv::Point2f point2(10.5, 20.5);

Size

Size用于表示尺寸,常用于定义矩形或图像的宽度和高度。

// 定义一个尺寸
cv::Size size(100, 200);

Rect

Rect用于表示矩形区域,常用于图像裁剪和定位特定区域。

// 定义一个矩形
cv::Rect rect(10, 20, 50, 60);

3. 应用使用场景

  • Point: 用于表示特征点、关键点、轨迹点等。
  • Size: 用于图像缩放、定义窗口大小等。
  • Rect: 用于图像裁剪、对象检测后的边界框等。

以下是 PointSizeRect 的一些代码实例说明它们在图像处理中的使用。

1. Point: 特征点、关键点、轨迹点等

import cv2

# 读取图像
image = cv2.imread('example.jpg')

# 定义特征点
point = (150, 100)

# 在图像上绘制特征点
cv2.circle(image, point, radius=5, color=(0, 255, 0), thickness=-1)

# 显示结果
cv2.imshow('Image with Point', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. Size: 图像缩放、定义窗口大小等

import cv2

# 读取图像
image = cv2.imread('example.jpg')

# 定义新的尺寸
new_size = (300, 300)

# 调整图像大小
resized_image = cv2.resize(image, new_size)

# 显示结果
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. Rect: 图像裁剪、对象检测后的边界框等

import cv2

# 读取图像
image = cv2.imread('example.jpg')

# 定义矩形区域 (x, y, width, height)
rect = (50, 50, 200, 200)

# 裁剪图像
x, y, w, h = rect
cropped_image = image[y:y+h, x:x+w]

# 显示结果
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

这些代码使用 OpenCV 库来演示如何操作 PointSizeRect

4. 原理解释

Point原理

Point结构简单,仅包含两个属性xy,代表横纵坐标。

Size原理

Size结构也很简单,只包含widthheight两个属性。

Rect原理

Rect包含四个属性:左上角坐标xy,以及宽度width和高度height。这些属性用于定义二维空间中的一个矩形。

5. 算法原理流程图及解释

流程图 (以Rect为例)

输入图像 定义矩形区域 提取矩形区域 进行处理 输出结果

原理解释

  1. 输入图像:读取或获取一张待处理的图像。
  2. 定义矩形区域:通过Rect类定义需要处理的矩形区域。
  3. 提取矩形区域:利用定义的矩形区域从图像中提取感兴趣区域(ROI)。
  4. 进行处理:对提取的区域进行进一步的图像处理操作,如滤波、边缘检测等。
  5. 输出结果:将处理结果显示或存储起来。

6. 实际应用代码示例实现

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    // 读取图像
    Mat img = imread("image.jpg");

    // 定义一个Rect
    Rect rect(50, 50, 200, 200);

    // 提取子区域
    Mat roi = img(rect);

    // 对子区域进行处理(如转换为灰度)
    Mat gray;
    cvtColor(roi, gray, COLOR_BGR2GRAY);

    // 显示结果
    imshow("Original Image", img);
    imshow("Gray ROI", gray);
    waitKey(0);

    return 0;
}

7. 测试代码

单元测试框架(Google Test)

#include <gtest/gtest.h>
#include <opencv2/opencv.hpp>

TEST(RectTest, CropImage) {
    cv::Mat img = cv::imread("test_image.jpg");
    ASSERT_FALSE(img.empty());

    cv::Rect rect(50, 50, 200, 200);
    cv::Mat roi = img(rect);
    
    ASSERT_EQ(roi.cols, 200);
    ASSERT_EQ(roi.rows, 200);
}

执行测试

mkdir build && cd build
cmake ..
make
./your_test_executable

8. 部署场景

  • 桌面应用:使用OpenCV库开发独立的图像处理桌面应用。
  • 嵌入式系统:在嵌入式设备(如树莓派、NVIDIA Jetson)上运行图像处理任务。
  • Web服务:通过RESTful API提供图像处理服务。

9. 材料链接

10. 总结

OpenCV提供了强大的图像处理和计算机视觉功能,其核心结构如PointSizeRect等非常基础但也极其重要。这些结构简化了图像处理中的繁琐操作,使开发者能够专注于更高层次的算法开发。

11. 未来展望

随着计算机视觉技术的不断发展,OpenCV还会继续扩展其功能,提供更加智能化的算法支持,如深度学习与图像处理的结合。同时,硬件加速(如GPU)的支持也会使得OpenCV在实时性要求高的应用中表现出色。

标签:Point,image,cv2,OpenCV,图像,Rect,Size
From: https://blog.csdn.net/feng1790291543/article/details/141094849

相关文章

  • OpenCV(cv::Mat 类的成员函数 ptr<T>())
    目录1.函数定义2.功能3.示例4.注意事项总结在OpenCV中,Mat类的成员函数ptr<T>()用于获取指向矩阵数据的指针,允许直接访问底层数据。T是指针的类型,它通常与矩阵的元素类型对应。通过这个函数,你可以以一种低开销的方式访问和修改矩阵数据。1.函数定义template<type......
  • opencv学习:基础用法和图像添加边界框设置
    1.opencv基础用法1.从文件加载图像a=cv2.imread("1.jpg")b=cv2.imread("2.jpg")2.从文件读取视频video=cv2.VideoCapture("1.mp4")3.读摄像头cv2.VideoCapture(0)4.保存图片cv2.imwrite(r"1_gray.jpg",b)5.展示图片cv2.imshow("shuiju",a)6.释......
  • 《深度学习》OpenCV 图像边缘检测 算法解析及代码演示
    目录一、图像边缘检测1、什么是边缘检测2、常用的边缘检测算法        1)Sobel算子    2)Scharr算子        3)Canny边缘检测算法        4)Laplacian算子3、边缘检测流程        1)预处理        2)计算梯度     ......
  • 【OpenCV】快速入门(二)--视频处理(1)
    OpenCV–视频处理先看代码#include<iostream>#include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"intmain(intargc,char**argv){cv::namedWindow("Example3",cv::WINDOW_AUTOSIZE);cv::VideoCaptu......
  • OpenCV(cv::getTickCount()、cv::getTickFrequency())
    目录1.getTickCount()2.getTickFrequency()3.综合应用4.注意事项getTickCount()和getTickFrequency()是OpenCV库中的两个函数,通常用于获取高精度的时间间隔。这两个函数主要用于计时和性能测量。1.getTickCount()getTickCount()函数用于返回从系统启动到当前为......
  • OpenCV(图像NaN处理)
    目录1.目的2.示例1.目的将src矩阵中的某些区域(由mask指定的非零区域)设置为NaN。SetToNan函数实现了这一功能。2.示例#include<iostream>#include<opencv2/opencv.hpp>usingnamespacestd;usingnamespacecv;voidSetToNan(cv::Mat&src,constcv::Mat......
  • MySQL服务端innodb_buffer_pool_size配置参数
    innodb_buffer_pool_size是什么?innodb_buffer_pool是InnoDB缓冲池,是一个内存区域保存缓存的InnoDB数据为表、索引和其他辅助缓冲区。innodb_buffer_pool_size是这个缓冲池的大小,默认128M(即134217728bytes)。innodb_buffer_pool_size有什么用?如果不设置innodb_buffer_pool_......
  • OpenCV绘图函数(14)图像上绘制文字的函数putText()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述在图像上绘制指定的文本字符串。cv::putText函数在图像上绘制指定的文本字符串。无法使用指定字体渲染的符号会被问号(?)替换。关于文本渲染的具体示例可以参考getTextSize函数......
  • OpenCV绘图函数(15)图像上绘制矩形函数 rectangle()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述绘制一个简单的、粗的或填充的直立矩形。这个函数cv::rectangle绘制一个矩形轮廓或一个填充的矩形,其两个相对的顶点分别是pt1和pt2。函数原型1voidcv::rectangle( Inpu......
  • CMake构建学习笔记13-opencv库的构建
    OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习软件库,旨在提供一个跨平台的、易于使用的、快速执行的计算机视觉接口。如果只是简单的使用,其实不必要像笔者这样使用源代码进行构建,直接使用官方提供的二进制安装包即可。一般来说,需要从源代码进行构建......