OpenCV学习(7.13)

今天开始尝试写直升机代码。
零号机代码,只考虑鼠标点击等等。暂时不添加拾取框,两台摄像机。
设两台摄像机之间距离为2d,高度为Z。
故摄像头坐标为(-d,0,0),(d,0,0)。
代码思路:
读入图片

畸变矫正

鼠标点击

像素坐标转成世界坐标

转成极坐标

传给单片机

imshow():
void imshow(const string& winname, InputArray mat);
第一个参数是窗口名字,第二个是要显示的图像。
如果窗口是用CV_WINDOW_AUTOSIZE创建的,那么显示图像原始大小;否则将图像进行缩放。
如果图像是16位无符号类型或32位整型,像素值除以256(即把值从[0,255*256]映射到[0,255])。
如果图像是32位浮点型,像素值便要乘以255。值的范围是[0,1]映射到[0,255]。

窗口创建的时候,如果设定了支持OpenGL,那么imshow还支持ogl::Buffer、ogl::Texture2D以及gpu::GpuMat作为输入。

#include "stdafx.h"

using namespace std;
using namespace cv;

int main()
{
  Mat A = imread("1.jpg");
  imwrite("2.png", A);
  return 0;
}

 

void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray
dst, int dtype=-1)

第一个参数,InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat。
第二个参数,alpha,表示第一个数组的权重
第三个参数,src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数。
第四个参数,beta,表示第二个数组的权重值。
第五个参数,gamma,一个加到权重和上的标量值。
第六个参数,dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。
第七个参数,dtype,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。
如果用数学公式来表达,addWeighted函数计算如下两个数组(src1和src2)的加权和,得到结果输出给第四个参数。即addWeighted函数的作用可以被表示为为如下的矩阵表达式为:
dst = src1[I]*alpha+ src2[I]*beta + gamma;
其中的 I 是多维数组元素的索引值。而且,在遇到多通道数组的时候,每个通道都需要独立地进行处理。另外需要注意的是,当输出数组的深度为CV_32S时,这个函数就不适用了,这时候就会内存溢出或者算出的结果压根不对。


定义ROI区域(region of interest)
定义ROI区域有两种方法。
第一种是使用cv:Rect.顾名思义,cv::Rect表示一个矩形区域。指定矩形的左上角坐标(构造函数的前两个参数)和矩形的长宽(构造函数的后两个参数)就可以定义一个矩形区域。
Mat imageROI;
imageROI=image(Rect(500,250,logo.cols,logo.rows));

另一种定义ROI的方式是指定感兴趣行或列的范围(Range)。Range是指从起始索引到终止索引(不包括终止索引)的一连段连续序列。cv::Range可以用来定义Range。如果使用cv::Range来定义ROI,那么前例中定义ROI的代码可以重写为:
imageROI=srcImage3(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));

综合实验:图像载入、显示、混合与输出

// testtt.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

using namespace std;
using namespace cv;

int main()
{
  Mat woman = imread("2.jpg");
  namedWindow("woman", WINDOW_AUTOSIZE);
  imshow("woman", woman);
  Mat man = imread("1.jpg");
  imshow("man", man);

  Mat imageROI;//ROI即感兴趣区域,Region of interest
  imageROI = woman(Range(0, 0 + man.rows), Range(150, 150 + man.cols));
  addWeighted(imageROI, 0.5, man, 0.5, 0, woman);

  namedWindow("test", WINDOW_AUTOSIZE);
  imshow("test", woman);
  waitKey(0);
  return 0;
}

 

尝试写第二版本的直升机程序:
双摄像头,认真计算矫正系数。
鼠标响应,给出轮廓,两种情况:圆形和两条线。
写数传(和图传是两个程序)

转载于:https://www.cnblogs.com/Shymuel/p/9316313.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值