代码为转载,出处找不到了,不贴了

工具条进度条:

  1. // ConvertColor.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5.  
  6. #include <iostream>
  7. #include <opencv2/highgui/highgui.hpp>
  8. #include <opencv2/imgproc/imgproc.hpp>
  9.  
  10. #pragma comment(lib,"opencv_core2410d.lib")
  11. #pragma comment(lib,"opencv_highgui2410d.lib")
  12. #pragma comment(lib,"opencv_imgproc2410d.lib")
  13.  
  14. using namespace std;
  15. using namespace cv;
  16. // Global variables
  17. const int slider_max = 100;
  18. int slider;
  19. Mat img;
  20. // Callback function for trackbar event
  21. void on_trackbar(int pos, void *)
  22. {
  23. Mat img_converted;
  24. if(pos > 0) cvtColor(img, img_converted, CV_RGB2GRAY);
  25. else img_converted = img;
  26. imshow("Trackbar app", img_converted);
  27. }
  28. int main()
  29. {
  30. img = imread("swan.jpg");
  31. namedWindow("Trackbar app");
  32. imshow("Trackbar app", img);
  33. slider = 0;
  34. createTrackbar("RGB <-> Grayscale", "Trackbar app", &slider, slider_max, on_trackbar);
  35. while(char(waitKey(1)) != 'q') {}
  36. return 0;
  37. }

效果:

图像裁切代码:

  1. // ConvertColor.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5.  
  6. #include <iostream>
  7. #include <opencv2/highgui/highgui.hpp>
  8. #include <opencv2/imgproc/imgproc.hpp>
  9.  
  10. #pragma comment(lib,"opencv_core2410d.lib")
  11. #pragma comment(lib,"opencv_highgui2410d.lib")
  12. #pragma comment(lib,"opencv_imgproc2410d.lib")
  13.  
  14. using namespace std;
  15. using namespace cv;
  16. // Global variables
  17. // Flags updated according to left mouse button activity
  18. bool ldown = false, lup = false;
  19. // Original image
  20. Mat img;
  21. // Starting and ending points of the user's selection
  22. Point corner1, corner2;
  23. // ROI
  24. Rect box;
  25. // Callback function for mouse events
  26. static void mouse_callback(int event, int x, int y, int, void *)
  27. {
  28. // When the left mouse button is pressed, record its position and save it in corner1
  29. if(event == EVENT_LBUTTONDOWN)
  30. {
  31. ldown = true;
  32. corner1.x = x;
  33. corner1.y = y;
  34. cout << "Corner 1 recorded at " << corner1 << endl;
  35. }
  36. // When the left mouse button is released, record its position and save it in corner2
  37. if(event == EVENT_LBUTTONUP)
  38. {
  39. // Also check if user selection is bigger than 20 pixels (jut for fun!)
  40. if(abs(x - corner1.x) > 20 && abs(y - corner1.y) > 20)
  41. {
  42. lup = true;
  43. corner2.x = x;
  44. corner2.y = y;
  45. cout << "Corner 2 recorded at " << corner2 << endl << endl;
  46. }
  47. else
  48. {
  49. cout << "Please select a bigger region" << endl;
  50. ldown = false;
  51. }
  52. }
  53. // Update the box showing the selected region as the user drags the mouse
  54. if(ldown == true && lup == false)
  55. {
  56. Point pt;
  57. pt.x = x;
  58. pt.y = y;
  59. Mat local_img = img.clone();
  60. rectangle(local_img, corner1, pt, Scalar(0, 0, 255));
  61. imshow("Cropping app", local_img);
  62. }
  63. // Define ROI and crop it out when both corners have been selected
  64. if(ldown == true && lup == true)
  65. {
  66. box.width = abs(corner1.x - corner2.x);
  67. box.height = abs(corner1.y - corner2.y);
  68. box.x = min(corner1.x, corner2.x);
  69. box.y = min(corner1.y, corner2.y);
  70. // Make an image out of just the selected ROI and display it in a new window
  71. Mat crop(img, box);
  72. namedWindow("Crop");
  73. imshow("Crop", crop);
  74. ldown = false;
  75. lup = false;
  76. }
  77. }
  78. int main()
  79. {
  80. img = imread("swan.jpg");
  81. namedWindow("Cropping app");
  82. imshow("Cropping app", img);
  83. // Set the mouse event callback function
  84. setMouseCallback("Cropping app", mouse_callback);
  85. // Exit by pressing 'q'
  86. while(char(waitKey(1)) != 'q') {}
  87. return 0;
  88. }

裁切效果:

OpenCV GUI基本操作,回调函数,进度条,裁剪图像等的更多相关文章

  1. 为OLED屏添加GUI支持6:进度条控件

    为OLED屏添加GUI支持6:进度条控件 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:S ...

  2. iOS面向编码|iOSVideoToolbox:读写解码回调函数CVImageBufferRef的YUV图像

    iOS面向编码|iOSVideoToolbox:读写解码回调函数CVImageBufferRef的YUV图像 本文档基于H.264的解码,介绍读写Video Toolbox解码回调函数参数CVImag ...

  3. Opencv step by step - 视频进度条

    上一个博文只是进行了视频播放,这里加上进度条. 下面是修改好的代码: #include <cv.h> #include <highgui.h> /* * tan@ubuntu: ...

  4. Video Toolbox:读写解码回调函数CVImageBufferRef的YUV图像

    本文档基于H.264的解码,介绍读写Video Toolbox解码回调函数参数CVImageBufferRef中的YUV或RGB数据的方法,并给出CVImageBufferRef生成灰度图代码.方便调 ...

  5. OpenCV常用基本处理函数(2)图像基本操作

    可以根据像素的行和列的坐标获取他的像素值.对 BGR 图像而言,返回值为 B,G,R 例如获取蓝色的像素值: img=cv2.imread('messi5.jpg')px=img[100,100]bl ...

  6. OpenCV常用基本处理函数(7)图像金字塔和直方图

    高斯金字塔 高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的.顶部图像中的每个像素值等于下一层图像中 5 个像素的高斯加权平均值. 这样操作一次一个 MxN 的图像就变成了一个 M/2xN/ ...

  7. OpenCV常用基本处理函数(6)图像梯度

    形态学转换 腐蚀 img = cv2.imread() kernel = np.ones((,),np.uint8) erosion = cv2.erode(img,kernel,iterations ...

  8. python-----opencv读视频、循环读图片显示进度条

    功能:opencv读视频,显示进度条,推动进度条快进.后退,按q退出.代码如下: import os import cv2 def nothing(emp): pass def jindu(name, ...

  9. 用layer-list实现弧形进度条

    本文转载自:http://www.linuxidc.com/Linux/2013-04/82743.htm 之前我有写过如何用style或者是layer-list实现自定义的横向进度条(http:// ...

随机推荐

  1. VS2010每次调试都出现“此项目已经过期”提示

    问题描述   最近因为项目需要,开发平台从VS2005切换成了VS2010,把一些老项目也转换到VS2010平台,因为是从低到高升级,微软还是做了很多兼容,基本上可以无缝切换,编译调试也基本正常,但是 ...

  2. The Zen Programmer

    专注 何为专注 关于 休息 怎么睡觉 心无杂念 我的体会 自我分析 初学者心态 无我 不要设置职业目标 敏事慎言 正念 做自己的老板 玩物养志 结语 最近在研读Christian Grobmeier ...

  3. 详解EBS接口开发之供应商导入

    (一)供应商常用标准表简介 1.1   常用标准表 如下表中列出了与供应商相关的表和说明: 表名 说明 其他信息 ap_suppliers 供应商头表 供应商的头信息如:供应商名.供应商编码.税号等 ...

  4. OpenMP实现生产者消费者模型

    生产者消费者模型已经很古老了吧,最近写了个OpenMP版的此模型之实现,来分享下. 先说一下模型的大致做法是: 1.生产者需要取任务,生产产品. 2.消费者需要取产品,消费产品. 生产者在生产某个产品 ...

  5. Android开发基础规范(二)

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52614696 前言:Androi ...

  6. Unity UGUI图文混排(五) -- 一张图集对应多个Text

    继上一篇说的更新了一张图集对应多个Text的功能,为了节省资源嘛 这里,但是也没有舍弃之前的一个Text一个图集,因为我感觉应该两个都有用,于是我重新写了一个脚本 1.其实大体跟前面的都没变,解析标签 ...

  7. 微软Telnet的回显功能开启

    win7和XP系统默认telnet的回显功能是关闭的.启用telnet回显功能:(1)首先进入命令行界面:输入telnet(2)进入Microsoft Telnet>命令提示符下,输入:set ...

  8. Android7.0 多窗口你值得拥有

    Android7.0 多窗口你值得拥有 什么是多窗口分屏? 多窗口分屏其实在国内并不陌生,已经有一些手机和平板搭载了"分屏多任务"和"APP窗口化"功能,但这些 ...

  9. 【并发编程】ThreadPoolExecutor参数详解

    ThreadPoolExecutor executor = new ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long ke ...

  10. 一个ExtJS实例

    聊聊ExtJS 这几天接触了一个项目 前台用的是extjs 发现这个东西还是有点意思的  就把前台的部分 剥离了下来 有兴趣的朋友可以当做模板学习 不多说先上效果图 这篇文章 可以看作是ext知识的一 ...