• 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
    #include
    
    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
    );


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

    

  • 相关阅读:
    【Mybatis+springBoot】实现模糊查询
    C. Good String(暴力枚举)
    定制ASP.NET 6.0的应用配置
    【0基础学算法】归并排序(超详细讲解+私人笔记+源码)
    编译OpenSSL注意事项
    maven的下载和安装教程
    【论文阅读】《Graph Neural Prompting with Large Language Models》
    matlab-day04
    【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介
    611. 有效三角形的个数
  • 原文地址:https://blog.csdn.net/weixin_67271870/article/details/128181807