zoukankan      html  css  js  c++  java
  • 【OpenCV归纳】1 体验OpenCV

    #include "highgui.h"
    
    int main(int argc,char** argv)
    {
         IplImage* img=cvLoadImage(argv[1]);
         cvNamedWindow("Test1",CV_WINDOW_AUTOSIZE);
         cvShowImage("Test1",img);
         cvWaitKey(0);
         cvReleaseImage(&img);
         cvDestoryWindow("Test1");
    }

    如果是完完全全的OpenCV初学者的话也许argv[1]会让人感到困惑,其实这里也可以用Linux地址来代替的,记得多用一个"",因为需要转义。cvLoadImage()函数是一个高层调用接口,它通过文件名来确定加载文件的格式,并且该函数将自动分配图像数据结构所需的内存。

    #include<cv.h>
    #include<highgui.h>
    
    void my_mouse_callback(int event, int x, int y, int flags, void* param);
    
    CvRect box;
    bool drawing_box = false;
    
    void draw_box(IplImage* img, CvRect rect)
    {
    	cvRectangle(img, 
    		cvPoint(box.x, box.y), 
    		cvPoint(box.x + box.width, box.y + box.height),
    		cvScalar(0xff, 0x00, 0x00));
    }
    
    int main(int argc, char* argv[])
    {
    	box = cvRect(-1, -1, 0, 0);
    	IplImage* image = cvCreateImage(
    		cvSize(200, 200),
    		IPL_DEPTH_8U,
    		3);
    	cvZero(image);
    	IplImage* temp = cvCloneImage(image);
    	cvNamedWindow("Box Example");
    
    	cvSetMouseCallback("Box Example",
    		my_mouse_callback,
    		(void*)image);
    
    	while (1)
    	{
    		cvCopyImage(image, temp);
    		if (drawing_box)
    			draw_box(temp, box);
    		cvShowImage("Box Example", temp);
    
    		if (cvWaitKey(15) == 27)
    			break;
    	}
    
    	cvReleaseImage(&image);
    	cvReleaseImage(&temp);
    	cvDestroyWindow("Box Example");
    }
    
    void my_mouse_callback(int event, int x, int y, int flags, void* param)
    {
    	IplImage* image = (IplImage*)param;
    
    	switch (event)
    	{
    	case CV_EVENT_MOUSEMOVE:
    	{
    		if (drawing_box)
    		{
    			box.width = x - box.x;
    			box.height = y - box.y;
    		}
    	}
    		break;
    	case CV_EVENT_LBUTTONDOWN:
    	{
    		drawing_box = true;
    		box = cvRect(x, y, 0, 0);
    	}
    		break;
    	case CV_EVENT_LBUTTONUP:
    	{
    		drawing_box = false;
    		if (box.width < 0)
    		{
    			box.x += box.width;
    			box.width *= -1;
    		}
    		if (box.height<0)
    		{
    			box.y += box.height;
    			box.height *= -1;
    		}
    		draw_box(image, box);
    	}
    		break;
    	}
    }


    HighGUI中创建滑动条的函数如下,前2个参数分别指定了滑动条的名字以及滑动条附属窗口的名字。随后的两个参数之一为value,它是一个整形指针,当滑动条被拖动时,OpenCV会自动将当前位置所代表的值传给指针指向的整数,另外一个参数count是一个整数值,为滑动条所能表示的最大值。最后一个参数是一个指向回掉函数的指针,当滑动条被拖动时,回掉函数会自动被调用。这跟鼠标事件的函数实现类似。回掉函数必须为CvTrackbarCallback格式。  

    int cvCreateTrackbar
    (  const char* trackbar_name,
       const char* window_name,
       int* value,
       int   count,
       CvTrackerCallback  on_change
    );

    void (*callback) (int position)  

    int cvGetTrackbarPos
    (
        const char* trackbar_name,
        const char* window_name
    );
    
    void cvSetTrackbarPos
    (
        const char* trackbar_name,
        const char* window_name,
        int pos
    );

    这两个函数可以用在程序的任何地方来读取或设置滑动条的值。

    

    版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    Shipconstructor 2005 破解发布
    活动目录(activate directory)
    上海地铁快成了乞丐天堂
    转载:制造业信息化:计划模拟APS软件驱动敏捷制造
    项目管理的测试版发布
    Introdution RemObject SDK
    怎样在osworkflow中使用BeanShell
    Java class 文件反编译工具 FrontEnd 2.0
    Tribon M3 license keygen
    利用osworkflow实现业务流程
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786202.html
Copyright © 2011-2022 走看看