小编sAm*_*sAm的帖子

OpenCV如何在使用单个静态图像时将速度矢量绘制为箭头

我试图在matlab中绘制速度向量,我们使用"箭头"功能http://www.mathworks.com/help/techdoc/ref/quiver.html

我需要使用OpenCV库在C++中移植相同的方法.

我听说有一些光流方法,即Lucas和Kanade(cvCalOpticalFlowLK)或Horn和Schunck(cvCalOpticalFlowHS)或块匹配方法(cvCalOpticalFlowBM)

但所有这些功能都需要两个图像,而我需要使用一个图像,因为我正在处理指纹.

请帮助我......

[编辑]找到解决方案

void cvQuiver(IplImage*Image,int x,int y,int u,int v,CvScalar Color,
                                            int Size,int Thickness){
cv::Point pt1,pt2;
double Theta;
double PI = 3.1416;

if(u==0)
    Theta=PI/2;
else
    Theta=atan2(double(v),(double)(u));

pt1.x=x;
pt1.y=y;

pt2.x=x+u;
pt2.y=y+v;

cv::line(Image,pt1,pt2,Color,Thickness,8);  //Draw Line


Size=(int)(Size*0.707);


if(Theta==PI/2 && pt1.y > pt2.y)
    {
    pt1.x=(int)(Size*cos(Theta)-Size*sin(Theta)+pt2.x);
    pt1.y=(int)(Size*sin(Theta)+Size*cos(Theta)+pt2.y);
    cv::line(Image,pt1,pt2,Color,Thickness,8);  //Draw Line

    pt1.x=(int)(Size*cos(Theta)+Size*sin(Theta)+pt2.x);
    pt1.y=(int)(Size*sin(Theta)-Size*cos(Theta)+pt2.y);
    cv::line(Image,pt1,pt2,Color,Thickness,8);  //Draw Line
  }
else{
    pt1.x=(int)(-Size*cos(Theta)-Size*sin(Theta)+pt2.x);
    pt1.y=(int)(-Size*sin(Theta)+Size*cos(Theta)+pt2.y);
    cv::line(Image,pt1,pt2,Color,Thickness,8);  //Draw Line

    pt1.x=(int)(-Size*cos(Theta)+Size*sin(Theta)+pt2.x);
    pt1.y=(int)(-Size*sin(Theta)-Size*cos(Theta)+pt2.y);
    cv::line(Image,pt1,pt2,Color,Thickness,8);  //Draw Line
    }

}
Run Code Online (Sandbox Code Playgroud)

c++ opencv vector

17
推荐指数
2
解决办法
2万
查看次数

警告:在将功能地址分配给功能指针时,从不兼容的指针类型[默认启用]进行分配

我试图使用函数指针实现一个简单的交换函数,但是当我将函数的地址分配给函数指针时pointersTofunctionB.c:14:6:warning: assignment from incompatible pointer type [enabled by default].以下是我的代码

#include <stdio.h>
void intSwap(int *a,int *b);
void charSwap(char *a,char *b);
void (*swap)(void*,void*);
int main(int argc, char const *argv[])
{
    int a=20,b=15;
    char c='j',d='H';
    swap=&intSwap;// warning here
    swap(&a,&b);
    printf("%d %d\n",a,b);
    swap=&charSwap;// warning here also
    swap(&c,&d);
    printf("%c %c\n",c,d ); 
    return 0;
}


void intSwap(int *a,int *b)
{
    *a=*a+*b;
    *b=*a-*b;
    *a=*a-*b;
}
void charSwap(char *a,char *b)
{
    char temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
Run Code Online (Sandbox Code Playgroud)

如何删除此警告.有人帮我这个.

c pointers function-pointers function

4
推荐指数
1
解决办法
4万
查看次数

标签 统计

c ×1

c++ ×1

function ×1

function-pointers ×1

opencv ×1

pointers ×1

vector ×1