OpenCV GUI基本操作,回调函数,进度条,裁剪图像等

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

 

工具条进度条:

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

#include "stdafx.h"

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#pragma comment(lib,"opencv_core2410d.lib")            
#pragma comment(lib,"opencv_highgui2410d.lib")            
#pragma comment(lib,"opencv_imgproc2410d.lib")  

using namespace std;
using namespace cv;
// Global variables
const int slider_max = 100;
int slider;
Mat img;
// Callback function for trackbar event
void on_trackbar(int pos, void *)
{
	Mat img_converted;
	if(pos > 0) cvtColor(img, img_converted, CV_RGB2GRAY);
	else img_converted = img;
	imshow("Trackbar app", img_converted);
}
int main()
{
	img = imread("swan.jpg");
	namedWindow("Trackbar app");
	imshow("Trackbar app", img);
	slider = 0;
	createTrackbar("RGB <-> Grayscale", "Trackbar app", &slider, slider_max, on_trackbar);
	while(char(waitKey(1)) != 'q') {}
	return 0;
}

 

效果:

 


 

 

 

图像裁切代码:

 

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

#include "stdafx.h"

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#pragma comment(lib,"opencv_core2410d.lib")            
#pragma comment(lib,"opencv_highgui2410d.lib")            
#pragma comment(lib,"opencv_imgproc2410d.lib")  

using namespace std;
using namespace cv;
// Global variables
// Flags updated according to left mouse button activity
bool ldown = false, lup = false;
// Original image
Mat img;
// Starting and ending points of the user's selection
Point corner1, corner2;
// ROI
Rect box;
// Callback function for mouse events
static void mouse_callback(int event, int x, int y, int, void *)
{
	// When the left mouse button is pressed, record its position and save it in corner1
	if(event == EVENT_LBUTTONDOWN)
	{
		ldown = true;
		corner1.x = x;
		corner1.y = y;
		cout << "Corner 1 recorded at " << corner1 << endl;
	}
	// When the left mouse button is released, record its position and save it in corner2
	if(event == EVENT_LBUTTONUP)
	{
		// Also check if user selection is bigger than 20 pixels (jut for fun!)
		if(abs(x - corner1.x) > 20 && abs(y - corner1.y) > 20)
		{
			lup = true;
			corner2.x = x;
			corner2.y = y;
			cout << "Corner 2 recorded at " << corner2 << endl << endl;
		}
		else
		{
			cout << "Please select a bigger region" << endl;
			ldown = false;
		}
	}
	// Update the box showing the selected region as the user drags the mouse
	if(ldown == true && lup == false)
	{
		Point pt;
		pt.x = x;
		pt.y = y;
		Mat local_img = img.clone();
		rectangle(local_img, corner1, pt, Scalar(0, 0, 255));
		imshow("Cropping app", local_img);
	}
	// Define ROI and crop it out when both corners have been selected
	if(ldown == true && lup == true)
	{
		box.width = abs(corner1.x - corner2.x);
		box.height = abs(corner1.y - corner2.y);
		box.x = min(corner1.x, corner2.x);
		box.y = min(corner1.y, corner2.y);
		// Make an image out of just the selected ROI and display it in a new window
		Mat crop(img, box);
		namedWindow("Crop");
		imshow("Crop", crop);
		ldown = false;
		lup = false;
	}
}
int main()
{
	img = imread("swan.jpg");
	namedWindow("Cropping app");
	imshow("Cropping app", img);
	// Set the mouse event callback function
	setMouseCallback("Cropping app", mouse_callback);
	// Exit by pressing 'q'
	while(char(waitKey(1)) != 'q') {}
	return 0;
}

 

 

裁切效果:

 


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
OpenCV中,回调函数是一种通过函数指针调用的函数,用于对事件或条件进行响应。在使用OpenCV时,可以使用回调函数来处理鼠标事件、键盘事件等。例如,在上述提供的代码中,onMouse函数就是一个回调函数,用于处理鼠标左键按下事件。当鼠标左键按下时,该函数会输出鼠标点击位置的像素值。 回调函数OpenCV中的应用很广泛,特别是在结合图像处理和用户交互时非常有用。通过定义自己的回调函数,可以实现各种各样的事件处理逻辑,只要符合OpenCV回调函数的格式即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [opencv回调函数](https://blog.csdn.net/hanshuobest/article/details/51320249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [OPENCV回调函数](https://blog.csdn.net/PINBODEXIAOZHU/article/details/41809301)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值