摘要:
YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式。 因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式。 RGB与YUV的变换公式如下: YUV(256 级别) 可以从8位 RGB 直接计算: Y = 0.299 R + 0.587 G + 0.114 B U = - 0.1687 R - 0.3313 G + 0.5 B + 128 V =... 阅读全文
摘要:
YUV,是一种颜色编码方法,Y表示明亮度(Luminance、Luma),U和V则是色度、浓度(Chrominance、Chroma)。 YUV,Y`UV,YCbCr,YPbPr等都可以称为YUV,彼此有重叠。 YUV和Y`UV通常用来描述模拟信号,YCbCr与YPbPr则是用来描述数位的影像信号。 YUV颜色编码方法相比于RGB的优势体现在两个方面: 将亮度信息与色彩信息分离,没有色彩信息可以显... 阅读全文
摘要:
GPU的硬件结构,也不是具体的硬件结构,就是与CUDA相关的几个概念:thread,block,grid,warp,sp,sm。 sp: 最基本的处理单元,streaming processor 最后具体的指令和任务都是在sp上处理的。GPU进行并行计算,也就是很多个sp同时做处理 sm:多个sp加上其他的一些资源组成一个sm, streaming multiprocessor. 其他资源也就... 阅读全文
摘要:
全局存储器,即普通的显存,整个网格中的任意线程都能读写全局存储器的任意位置。 存取延时为400-600 clock cycles 非常容易成为性能瓶颈。 访问显存时,读取和存储必须对齐,宽度为4Byte。如果没有正确的对齐,读写将被编译器拆分为多次操作,降低访存性能。 多个half-warp的读写操作如果能够满足合并访问,则多次访存操作会被合并成一次完成。 合并访问的条件,GT200放宽了合并访... 阅读全文
摘要:
下面简单介绍一些cuda中的共享存储器和全局存储器 共享存储器,shared memory,可以被同一块中的所有线程访问的可读写存储器,生存期是块的生命期。 Tesla的每个SM拥有16KB共享存储器。 在编程过程中,有静态的shared memory 动态的shared memory 静态的shared memory 在程序中定义 __shared__ type shared[SIZE];... 阅读全文
摘要:
问题描述:已知多边形点集C={P1,P2,...,PN},其排列顺序是杂乱,依次连接这N个点,无法形成确定的多边形,需要对点集C进行排序后,再绘制多边形。 点集排序过程中,关键在于如何定义点的大小关系。 以按逆时针排序为例,算法步骤如下: 定义:点A在点B的逆时针方向,则点A大于点B 1.计算点集的重心O,以重心作为逆时针旋转的中心点。 2.计算点之间的大小关系。 大小关系的计算,可由两种方法进行... 阅读全文
摘要:
问题描述:已知两条线段P1P2和Q1Q2,判断P1P2和Q1Q2是否相交,若相交,求出交点。 两条线段的位置关系可以分为三类:有重合部分、无重合部分但有交点、无交点。 算法的步骤如下: 1.快速排斥实验。 设以线段P1P2为对角线的矩形为R,设以线段Q1Q2为对角线的矩形为T,如果R和T不相交,则两线段不相交。 2.跨立实验。 如果两线段相交,则两线段必然相互跨立对方。 若P1P2跨立Q1Q2,则... 阅读全文
摘要:
问题描述:已知点P(x,y)和多边形Poly,判断点P(x,y)是否在多边形内部。 基本方法:射线法 以点P为端点,向左方作射线L,由于多边形是有界的,所以射线L的左端一定在多边形外部,考虑沿着L从无究远处开始自左向右移动。 遇到和多边形的第一个交点的时候,进入到了多边形的内部,遇到第二个交点的时候,离开了多边形... 因而当L和多边形的交点数目C是奇数的时候,P在多边形内,是偶数,则P在多边形外... 阅读全文
摘要:
问题描述:已知两个多边形Poly1和Poly2,分别由点集C1={P1,P2,...,Pm}和C2={Q1,Q2,...,Qn}表示,求这两个多边形的交集。 算法思想: 两个多边形相交后,其顶点要么是两个多边形边的交点,要么是在多边形内部的点。 算法步骤: 1.计算两个多边形每条边之间的交点。 2.计算包含在多边形内部的点。 3.将交点和多边形内部的点,按逆时针(或顺时针)排序,得出最终的点集。 ... 阅读全文
摘要:
问题描述:已知两幅图像Image1和Image2,计算出两幅图像的重叠区域,并在Image1和Image2标识出重叠区域。 算法思想: 若两幅图像存在重叠区域,则进行图像匹配后,会得到一张完整的全景图,因而可以转换成图像匹配问题。 图像匹配问题,可以融合两幅图像,得到全景图,但无法标识出在原图像的重叠区域。 将两幅图像都理解为多边形,则其重叠区域的计算,相当于求多边形的交集。 通过多边形求交,获取... 阅读全文
摘要:
1.分离视频音频流ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流 2.视频解复用ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264 ff... 阅读全文
摘要:
问题描述:ffplay播放rtsp视频流时,播放过程中随机出现花屏现象。 基本流程学习:阅读ffplay源码,熟悉其播放rtsp视频流的基本流程。 在ffplay源码阅读和分析的基础上,画出了其播放rtsp的函数调用关系,如下图所示: avformat_open_input函数根据输入的文件名,与rtsp_read_packet关联。 rtsp_read_packet完成每个rtp包的读取和解析... 阅读全文
摘要:
问题描述:在测试目标跟踪算法时,需要选择不同区域作为目标,进行目标跟踪,测试目标跟踪的效果。 解决思路: 1.OpenCV中提供了鼠标交互控制,利用setMouseCallback()给固定的窗口设置鼠标回调函数。 2.在鼠标回调函数中,选择感兴趣区域。 代码实现如下,将感兴趣区域封装在MouseSelect类中,提供选择点和矩形框两种模式。 1 #pragma once 2 #ifndef... 阅读全文
摘要:
CUDA基本使用方法 在介绍OpenCV中GPU模块使用之前,先回顾下CUDA的一般使用方法,其基本步骤如下: 1.主机代码执行;2.传输数据到GPU;3.确定grid,block大小; 4.调用内核函数,GPU运行程序;5.传输结果到CPU;6.继续主机代码执行。 下图是两个向量相加的简单示例程序和处理流图。 注意的问题:cu,cpp文件的组织 内核函数和其wrapper函数置于... 阅读全文
摘要:
问题描述:项目中,需要对高清监控视频分析处理,经测试,其解码过程所占CPU资源较多,导致整个系统处理效率不高,解码成为系统的瓶颈。 解决思路: 利用GPU解码高清视频,降低解码所占用CPU资源,加速解码过程。 一、OpenCV中的硬解码 OpenCV2.4.6中,已实现利用GPU进行读取视频,由cv::gpu::VideoReader_GPU完成,其示例程序如下。 1 int main(int ... 阅读全文
摘要:
一、OpenCV中的硬编码 OpenCV2.4.6中,已实现利用GPU进行写视频,编码过程由cv::gpu::VideoWriter_GPU完成,其示例程序如下。 1 int main(int argc, const char* argv[]) 2 { 3 if (argc != 2) 4 { 5 std::cerr " > frame; 28 ... 阅读全文
摘要:
前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码。 一、DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范。DXVA规范制定硬件加速解码可分四级:VLD,控制BitStream;IDCT,反余弦变换;Mocomp,运动补偿,Pixel Prediction;PostProc,显示后处理。其中,VLD加速等级最高,所以其包含IDC... 阅读全文