opencv 鼠标操作 裁剪图片

本文介绍如何利用OpenCV实现图片裁剪功能,通过鼠标操作选取区域并完成裁剪,简单易懂。
摘要由CSDN通过智能技术生成

rt, 本程序用调用了opencv裁剪图片, 其实本质上就是鼠标操作。


#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"
#include <iostream>
#include <string>
using namespace cv;
using namespace std;

// global variable
static Mat g_img_src;
static Mat g_img_src_res;
static Mat g_img_dst;
static Mat g_img_sub;


static bool g_is_rect_inited = false;
static Point g_rect_tl;
static string g_window_name = "image";

static int imagenum = 13;

string sourcefolder = "sele" ;
string resfolder = "re";

static void onMouse( int event, int x, int y, int, void* )
{

	if(CV_EVENT_LBUTTONDOWN == event){
		g_is_rect_inited = true;
		g_rect_tl = Point(x, y);    
	}
	else if (CV_EVENT_MOUSEMOVE == event && g_is_rect_inited){      
		g_img_src.copyTo(g_img_dst);
		rectangle(g_img_dst, g_rect_
实现裁剪图片软件可以通过结合QtOpenCV库来完成。下面是一个简单的实现步骤: 1. 使用Qt设计带有文件选择和图像显示控件的界面,使用户能够选择要裁剪图片。 2. 使用OpenCV库读取所选图片,并在Qt界面上显示。 3. 添加裁剪功能:在图像上选择裁剪区域并记录裁剪框的坐标。 4. 使用OpenCV库进行图像裁剪,并将裁剪后的图像显示在Qt界面上。 以下是一个简单的示例代码: ```c++ #include <opencv2/opencv.hpp> #include <QFileDialog> #include <QImage> #include <QPixmap> #include <QWidget> #include <QMouseEvent> using namespace cv; class ImageCropper : public QWidget { public: ImageCropper(QWidget *parent = nullptr); ~ImageCropper(); private: QImage Mat2QImage(Mat const& src); Mat QImage2Mat(QImage const& src); void showImage(Mat const& src); void mousePressEvent(QMouseEvent* event); void mouseMoveEvent(QMouseEvent* event); void mouseReleaseEvent(QMouseEvent* event); int x1, y1, x2, y2; bool cropFlag; QImage qimage; Mat matImage; }; ImageCropper::ImageCropper(QWidget *parent) : QWidget(parent) { // 创建UI界面并添加控件 } ImageCropper::~ImageCropper() { } QImage ImageCropper::Mat2QImage(Mat const& src) { // 将OpenCV中的Mat转为Qt中的QImage } Mat ImageCropper::QImage2Mat(QImage const& src) { // 将Qt中的QImage转为OpenCV中的Mat } void ImageCropper::showImage(Mat const& src) { // 将Mat转为QImage并在Qt界面上显示 } void ImageCropper::mousePressEvent(QMouseEvent* event) { // 记录鼠标按下的位置 } void ImageCropper::mouseMoveEvent(QMouseEvent* event) { // 鼠标移动时更新裁剪框的位置 } void ImageCropper::mouseReleaseEvent(QMouseEvent* event) { // 记录鼠标松开的位置并进行裁剪 } int main(int argc, char *argv[]) { QApplication a(argc, argv); ImageCropper w; w.show(); return a.exec(); } ``` 注意:以上代码仅提供了一个基本的框架,还需要进一步完善和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值