博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV学习(7.13)
阅读量:5861 次
发布时间:2019-06-19

本文共 2275 字,大约阅读时间需要 7 分钟。

今天开始尝试写直升机代码。

零号机代码,只考虑鼠标点击等等。暂时不添加拾取框,两台摄像机。
设两台摄像机之间距离为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

你可能感兴趣的文章
最新的搜索引擎提交入口
查看>>
javax.net.ssl.SSLHandshakeException(Cas导入证书)
查看>>
shell 学习笔记(19)
查看>>
人有多大懒,才有多大闲 (评论『卓有成效的程序员』)
查看>>
远程部署服务器的安装
查看>>
php 中xdebug安装
查看>>
eclipse开发调试wordpress(一)-安装php开发环境
查看>>
磁盘配额(Quota)
查看>>
oracle故障收集
查看>>
深入浅出REST
查看>>
kvm与virsh两种创建虚拟机方式的一些问题
查看>>
高效编写Dockerfile的几条准则
查看>>
PXE+HTTP+tftp+kickstart 网络自动化安装centos6.5
查看>>
一、Windows Server 2008 R2 部署Hyper-V
查看>>
adm100练习6-修改系统参数值
查看>>
HBase1.2.3架构剖析(五) 之 批量装载
查看>>
codeIgniter框架基本结构
查看>>
自动加密代码编写
查看>>
Linux系统资源监控命令vmstat\mpstat\sar\iostat\top
查看>>
java笔试面试题---基础部分2
查看>>