// 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;
}

posted on 2013-04-18 14:22  qqhfeng16  阅读(1094)  评论(0编辑  收藏  举报