zoukankan      html  css  js  c++  java
  • OPencv基本操作,响应键盘、鼠标、滚动条

    // my9.cpp : 定义控制台应用程序的入口点。
    //

    ////////////////////////////////////////////////////////////////////////
    //
    // hello-world.cpp
    //
    // 该程序从文件中读入一幅图像,将之反色,然后显示出来.
    // 处理鼠标事件 *****
    // 处理键盘事件 *****
    // 处理滑动条事件 *************
    ////////////////////////////////////////////////////////////////////////

    #include "stdafx.h"
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #include <cv.h>
    #include <highgui.h>

    #include <iostream> ////这两个要一块用*************
    using namespace std; //这两个要一块用*************


    //定义鼠标处理程序
    void mouseHandler(int event, int x, int y, int flags, void* param)
    {
        switch(event){
          case CV_EVENT_LBUTTONDOWN:
              if(flags & CV_EVENT_FLAG_CTRLKEY)
                  printf("Left button down with CTRL pressed\n");
              break;

          case CV_EVENT_LBUTTONUP:
              printf("Left button up\n");
              break;
        }
    }

    //定义滑动条程序
    void trackbarHandler(int pos)
    {
        printf("滑动条位置: position: %d\n",pos);
    }

    // int pos = cvGetTrackbarPos("bar1","win1"); 获得当前的位置
    //cvSetTrackbarPos("bar1", "win1", 25);  设置滑动条的位置

    int _tmain(int argc, _TCHAR* argv[])
    {
        IplImage* img = 0;
        int height,width,widthStep,channels;
        uchar *data;
        int i,j,k;

        // load an image  
        img=cvLoadImage("e:\\wali2.jpg");
        if(!img){
            printf("Could not load image file: %s\n",argv[1]);
            exit(0);
        }

        // get the image data
        height    = img->height;
        width     = img->width;
        widthStep      = img->widthStep;
        channels  = img->nChannels;
        data      = (uchar *)img->imageData;
        printf("Processing a %dx%d image with %d channels\n",height,width,channels);

        // create a window
        cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
        cvMoveWindow("mainWin", 100, 100);

        
        cvSetMouseCallback("mainWin",mouseHandler);  //第三个参数可以设置为NULL


        int trackbarVal=25;
        int maxVal=100;
        cvCreateTrackbar("bar1", "mainWin", &trackbarVal ,maxVal , trackbarHandler);

        // invert the image
        // 相当于 cvNot(img); 先复制一个图像,取翻后复到新图像中
        // IplImage *pDstImg = cvCreateImage(cvGetSize(img),img->depth,img->nChannels);
        // cvNot(img, pDstImg);

        for(i=0;i<height;i++)
            for(j=0;j<width;j++)
                for(k=0;k<channels;k++)
            data[i*widthStep+j*channels+k]=255-data[i*widthStep+j*channels+k];

        // show the image
        cvShowImage("mainWin", img );





        // wait for a key
        //cvWaitKey(0);

        while(1){
            int key=cvWaitKey(1000);
            if(key==27) break;
            cout << key << endl;
        }

        // release the image
        cvReleaseImage(&img );
        return 0;
    }

  • 相关阅读:
    javascript如何封装函数
    addEventListener和attachEvent区别
    Infinity NaN undefined和null
    hasOwnProperty
    蜂巢式图片墙布局
    复选框使用总结
    文本框获得焦点时改变背景颜色
    自定义动画animate
    click()、bind()、live()和delegate()方法
    图片提示效果
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/3028365.html
Copyright © 2011-2022 走看看