Terran_Lee 2014-03-12 07:36
浏览 1510

opencv 在vs下event出现问题

我原来在linux下面配置的opencv环境,写了一些代码,后来需要移到windows下面,在vs2012里面构建起来,结果就出现了一些问题

代码如下
#include "stdfx.h"
#include "cv.h"
#include "highgui.h"
#include "cstdlib"

using namespace std;

const int windowsizex = 400;
const int windowsizey = 400;

const int stacksize = 1000;
CvPoint pointstack[stacksize];
int top = 0;

CvPoint begin;
CvPoint end;
int counter = 0;

void printline(IplImage* img)
{
cvLine(img , begin , end , cvScalar(255 , 255 , 255) , 1);
}
void my_mouse_callbacck(int event , int x , int y , int flags , void* param)
{
IplImage* image = (IplImage*) param;
if(flags == CV_EVENT_FLAG_CTRLKEY)
{
if(event == CV_EVENT_LBUTTONDOWN)
cout<<"yes"<<endl;
//scanlinefill(x , y , image);
}

else
{
    switch(event){
        case CV_EVENT_MOUSEMOVE : {
            if(counter != 0)
                end = cvPoint(x , y);
        }
        break;
        case CV_EVENT_LBUTTONDOWN : {
            if(counter > 0)
            {
                end = begin;
                begin = cvPoint(x , y);
                printline(image);               //print the important line inside the mouse event
            }
            else
            {
                begin = cvPoint(x , y);
                end = cvPoint(x , y);
            }
            counter++;
        }
        break;
        case CV_EVENT_LBUTTONDBLCLK : {
            counter = 0;
        }
    }
}

}

int main(int argc , char** argv)
{
IplImage* img = cvCreateImage(cvSize(windowsizex , windowsizey) ,IPL_DEPTH_8U , 3);
cvZero(img);

IplImage* temp = cvCloneImage(img);
cvNamedWindow("book3" , CV_WINDOW_AUTOSIZE);

cvSetMouseCallback("book3" , my_mouse_callbacck , (void*)img);

while(true)
{
    cvCopyImage(img , temp);
    if(counter > 0) printline(temp);       
    cvShowImage("book3" , temp);
    if(cvWaitKey(15) == 27) break;
}

cvReleaseImage(&img);
cvReleaseImage(&temp);
cvDestroyWindow("book3");

return 0;

}

程序大概就是左键开始画线,每按一下都有一个拐点,双击的时候画线停止

问题如下:
就在mouse_callback这个函数里面,如果按下了alt键,然后再按左键,应该会调用一个函数,这里就用cout来验证了
if(flags == CV_EVENT_FLAG_CTRLKEY)
{
if(event == CV_EVENT_LBUTTONDOWN)
cout<<"yes"<<endl;
//scanlinefill(x , y , image);
}
本来在linux下面是能够正常执行的。
不过在windows的vs下面就不能够正常执行了,就是cout那一句一直没有执行出来。
不过如果在FLAG_CTRLKEY那个大括号里面添加上一句cout是能够执行的。
而且不按住alt的那些鼠标操作switch等等的,都能够正常操作。

不知道是什么原因?
求大神指点,先谢过。

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
    • ¥30 python代码,帮调试
    • ¥15 #MATLAB仿真#车辆换道路径规划
    • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
    • ¥15 数据可视化Python
    • ¥15 要给毕业设计添加扫码登录的功能!!有偿
    • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
    • ¥15 微信公众号自制会员卡没有收款渠道啊