资料结构操作与运算-CvRect,CvBox2D资料结构

2023-11-30 05:32

本文主要是介绍资料结构操作与运算-CvRect,CvBox2D资料结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 转自http://hi.baidu.com/%C3%B5%D1%A9%D3%C4%CF%E3/blog/item/9fbd6b3f55e1e23471cf6cf8.html

这两个资料结构都是OpenCV ,roi专用的资料结构,roi,全名的意思就是感兴趣的区域(感兴趣区) ,对于图形来讲,总是有一些物体或是重要的图像是我们必须要做研究,追踪或分析的,物件追踪在影像处理也是很大的一们领域,举凡是人脸追踪,汽车追踪,鸟类追踪,或是图形检索都是可以利用的roi的资料结构做实作的,而研究或分析的部份,则是对感兴趣的区域实作特殊的演算法,或是对他做纹理或特征分析,再资讯比对上面会得到很大的帮助。而CvRect资料结构则是画方框, CvBox2D则是椭圆形的制作,一般感兴趣区域演算法都是用方框CvRect来做实作, CvBox2D则是在OpenCV用人脸椭圆追踪比较用的到。

这张图片则是简单的实作撷取感兴趣的区域,图中人物的头像被cvRect资料结构设定,传给IplImage资料结构而被抓到了,这只是一个简单的手动抓人物的实作.这边ROI的制作方式有很多种,这边只是其中一种的介绍,之后还会有ROI相关的函式应用,在这张图片内,利用cvRect()撷取感兴趣位置的座标,以及他的区块大小,前两个参数是座标,后两个是宽跟高,再将cvRect资料结构用cvRectToROI()转成IplROI格式,然后直接给IplImage资料结构内的ROI,而Rect2的实作也只是把IplROI结构转换成CvRect的资料结构罢了,而如果把IplImage资料结构的ROI设定成NULL,那又会回到原图影像大小了,在这边cvRectToROI()的第二个参数是COI(Color Of Interesting)感兴趣的通道颜色,而在OpenCV的cvShowImage()没有被实作出来,而它还是在其他演算法函式上被用的到.

CvRect 
矩形框的偏移和大小 

typedef struct CvRect
{
int x; /* 方形的最左角的x-坐标 */
int y; /* 方形的最上或者最下角的y-坐标 */
int width; /* 宽 */
int height; /* 高 */
}
CvRect;
/* 构造函数*/
inline CvRect cvRect( int x, int y, int width, int height );

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int main()
{
     IplImage *Image1;
     IplROI ROI;
     CvRect Rect1,Rect2;
     Image1=cvLoadImage("coast2.jpg",1);
     Rect1=cvRect(200,50,100,100);
     ROI=cvRectToROI(Rect1,0);
     Image1->roi=&ROI;

     Rect2=cvROIToRect(*Image1->roi);

     cvNamedWindow("Coast(Region Of Interesting)",1);
     cvShowImage("Coast(Region Of Interesting)",Image1);

     Image1->roi=NULL;
     cvNamedWindow("Coast",1);
     cvShowImage("Coast",Image1);

     cvWaitKey(0);
}

CvBox资料结构
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>


int main()
{
     CvPoint2D32f Point1 =cvPoint2D32f(200,200);
     CvSize2D32f Size1 = cvSize2D32f(50,50);
     CvBox2D Box1;

     Box1.center=Point1;
     Box1.size=Size1;
     Box1.angle=90;

     printf("Box Point is :(%.1f,%.1f)\n",Box1.center.x,Box1.center.y);
     printf("Box Size is : (%.1f,%.1f)\n",Box1.size.width,Box1.size.height);
     printf("Box Angle is : %.1f\n",Box1.angle);
     system("pause");
}

这篇关于资料结构操作与运算-CvRect,CvBox2D资料结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/435817

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco