Get Intensity along a line based on OpenCV
The interpolate function is used to get intensity of a point which is not on exactly a pixel.
The code is written in C++. Because it is template function, so they should be put in header file.
// Interpolates pixel intensity with subpixel accuracy.
// Abount bilinear interpolation in Wikipedia:
// http://en.wikipedia.org/wiki/Bilinear_interpolation
template <class T>
float interpolate(const Mat &mat, float x, float y)
{
// Get the nearest integer pixel coords (xi;yi).
int xi = cvFloor(x);
int yi = cvFloor(y); float k1 = x - xi; // Coefficients for interpolation formula.
float k2 = y - yi; bool b1 = xi < mat.cols - 1; // Check that pixels to the right
bool b2 = yi < mat.rows - 1; // and to down direction exist. float UL = mat.at<T>(Point(xi, yi));
float UR = b1 ? mat.at<T>( Point (xi + 1, yi ) ) : 0.f;
float LL = b2 ? mat.at<T>( Point ( xi, yi + 1) ) : 0.f;
float LR = b1 & b2 ? mat.at <T>( Point ( xi + 1, yi + 1 ) ) : 0.f; // Interpolate pixel intensity.
float interpolated_value = (1.0f - k1) * (1.0f - k2) * UL + k1 * (1.0f - k2) * UR +
(1.0f - k1) * k2 * LL + k1 * k2 * LR; return interpolated_value;
} //Get the intensity along an input line
template <class T>
int GetIntensityOnLine ( const Mat &mat, const Point &start, const Point &end, vector<float> &vecOutput )
{
if ( start.x >= mat.cols || start.y >= mat.rows )
return -1;
if ( end.x >= mat.cols || end.y >= mat.rows )
return -1; float fLineLen = (float)sqrt ( ( end.x - start.x ) * ( end.x - start.x ) + ( end.y - start.y ) * ( end.y - start.y ) );
if ( fLineLen < 1 )
return -1; float fCos = ( end.x - start.x ) / fLineLen;
float fSin = ( end.y - start.y ) / fLineLen; float fCurrentLen = 0.f;
while ( fCurrentLen < fLineLen ) {
float fX = start.x + fCos * fCurrentLen;
float fY = start.y + fSin * fCurrentLen;
float fIntensity = interpolate<T> ( mat, fX, fY );
vecOutput.push_back ( fIntensity ); ++ fCurrentLen;
} return 0;
}
Get Intensity along a line based on OpenCV的更多相关文章
- logoff remote desktop sessions via command line tools
This trick I learned from my one of ex-college. In Windows servers, only two remote desktop session ...
- Build OpenCV text(OCR) module on windows
Background. AOI software needs to use the OCR feature to recognize the texts on the chips. Because o ...
- OpenCV Template Matching Subpixel Accuracy
OpenCV has function matchTemplate to easily do the template matching. But its accuracy can only reac ...
- OpenCV CommandLineParser 的用法
OpenCV CommandLineParser 的用法 去百度了一下,关键字:OpenCV CommandLineParser 发现,最多的讲解是:opencv源码解析之(5):CommandLi ...
- Android OpenCV实现图片叠加,水印
关于如何用纯OpenCV实现图片叠加的例子实在是太少,太多的是使用 C++,JNI实现的,如果要用C++的话,我们为啥不转行做C++ 下面的例子基于 Android JavaCV 实现了在im_bea ...
- 基于OpenCV的面部交换
需要装python库 OpenCV dlib docopt(根据打开方式选择是否装) # -*- coding: UTF-8 #本电脑试运行 命令 python F:\python_project\s ...
- opencv霍夫变换
霍夫变换不仅可以找出图片中的直线,也可以找出圆,椭圆,三角形等等,只要你能定义出直线方程,圆形的方程等等. 不得不说,现在网上的各种博客质量真的不行,网上一堆文章,乱TM瞎写,误人子弟.本身自己就没有 ...
- opencv之霍夫曼变换
霍夫变换不仅可以找出图片中的直线,也可以找出圆,椭圆,三角形等等,只要你能定义出直线方程,圆形的方程等等. 不得不说,现在网上的各种博客质量真的不行,网上一堆文章,乱TM瞎写,误人子弟.本身自己就没有 ...
- 行为识别(action recognition)相关资料
转自:http://blog.csdn.net/kezunhai/article/details/50176209 ================华丽分割线=================这部分来 ...
随机推荐
- Redis -- 03 持久化
Redis提供了两种不同的方法来将数据存储到硬盘里面,一种叫内存快照,另一种叫只追加文件(AOF),这两种方法既可以同时使用课可以单独使用,也可以都不使用,取决于场景. 快照 快照是将某一时刻的所有数 ...
- CentOS 7 vs CentOS 6的不同
(1)桌面系统 [CentOS6] GNOME 2.x [CentOS7] GNOME 3.x(GNOME Shell) (2)文件系统 [CentOS6] ext4 [CentOS7] xfs (3 ...
- HTML5 Canvas核心技术图形动画与游戏开发(读书笔记)----第一章,基础知识
一,canvas元素 1 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容 <canvas id="canvas ...
- Linux 编译ACE
1.下载 从官网下载地址 http://download.dre.vanderbilt.edu/previous_versions/选择一个版本下载. 注意,如果是在linux上编译,需要下载.gz结 ...
- navicat连接My SQL时忘记root密码处理方法
前端时间安装完My SQL5.6以后很长时间没用过,用navicat连接时有错误提示 应该是密码错误了,但是忘记了root的密码. 在网上找了很久,终于找到修改root密码的方法并修改成功. 1. 关 ...
- jquery 百度搜索
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- JVM体系结构与工作方式
JVM全程是java virtual machine(java虚拟机). 以计算为中心来看计算机的体系结构可以分为以下几个部分: 1.指令集:这个计算机所能识别的机器语言的命令集合; 2.计算单元:能 ...
- Software Development Principle
Every great piece of software begins with customer's big idea. As a professional softeware developer ...
- 缓存AsimpleCache -- 解决Android中Sharedpreferences无法存储List数据/ASimpleCache
Sharedpreferences想必大家在项目中都经常会用到,但是如果需要在本地需要存储比较多的数据,存储一个集合的时,发现Sharedpreferences并不 是那么好使了. 分析 如果需要在本 ...
- composer.json:项目安装!!!!!!!!!!
基本用法 基本用法 安装 composer.json:项目安装 关于 require Key 包名称 包版本 下一个重要版本(波浪号运算符) 稳定性 安装依赖包 composer.lock - 锁文件 ...