当前位置: 首页 > news >正文

[C++][opencv]基于opencv实现photoshop算法图像剪切

【测试环境】

vs2019

opencv==4.8.0

【效果演示】

【核心实现代码】


//图像剪切
//参数:src为源图像, dst为结果图像, rect为剪切区域
//返回值:返回0表示成功,否则返回错误代码
int imageCrop(InputArray src, OutputArray dst, Rect rect)
{Mat input = src.getMat();if (input.empty()) {return -1;}//计算剪切区域:  剪切Rect与源图像所在Rect的交集Rect srcRect(0, 0, input.cols, input.rows);rect = rect & srcRect;if (rect.width <= 0 || rect.height <= 0) return -2;//创建结果图像dst.create(Size(rect.width, rect.height), src.type());Mat output = dst.getMat();if (output.empty()) return -1;try {//复制源图像的剪切区域 到结果图像input(rect).copyTo(output);return 0;}catch (...) {return -3;}
}//========================  主程序开始 ==========================static string window_name = "Draw a Rect to crop";
static Mat src;  //源图片
bool  isDrag = false;
Point point1; //矩形的第一个点
Point point2; //矩形的第二个点static void callbackMouseEvent(int mouseEvent, int x, int y, int flags, void* param)
{switch (mouseEvent) {case EVENT_LBUTTONDOWN:point1 = Point(x, y);point2 = Point(x, y);isDrag = true;break;case EVENT_MOUSEMOVE:if (isDrag) {point2 = Point(x, y);Mat dst = src.clone();Rect rect(point1, point2); //得到矩形rectangle(dst, rect, Scalar(0, 0, 255));//画矩形imshow(window_name, dst); //显示图像}break;case EVENT_LBUTTONUP:if (isDrag) {isDrag = false;Rect rect(point1, point2); //得到矩形imageCrop(src, src, rect); //图像剪切imshow(window_name, src); //显示图像}break;}return;
}

 【完整演示代码下载】

https://download.csdn.net/download/FL1623863129/89633023

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java的jdk配置成功,但是输入java -version等,命令行没有任何反应
  • 【区块链+商贸零售】吾卡数字预付式消费服务平台 | FISCO BCOS应用案例
  • SpringBoot-配置加载顺序
  • servlet的执行顺序
  • 健韵坊(详细项目实战一)Spring系列 + Vue3
  • 探索AWS免费资源:无账号也能体验云计算魅力
  • 网络协议七 应用层 DNS协议 和 DHCP协议 这两个都了解就好
  • ffmpeg的基础命令
  • 基于IMX8M_plus+FPGA+AI监护仪解决方案
  • STM32cubeMX配置Systick的bug
  • js原生模板引擎
  • 浅看MySQL数据库
  • 面试题 08.01. 三步问题
  • PULLTYPE
  • MoExtend: 模态和任务扩展调整的新专家
  • 【前端学习】-粗谈选择器
  • Angular2开发踩坑系列-生产环境编译
  • Bootstrap JS插件Alert源码分析
  • ES6 ...操作符
  • GitUp, 你不可错过的秀外慧中的git工具
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Linux后台研发超实用命令总结
  • Spring Boot快速入门(一):Hello Spring Boot
  • sublime配置文件
  • XForms - 更强大的Form
  • 关于Flux,Vuex,Redux的思考
  • 聊聊sentinel的DegradeSlot
  • 设计模式走一遍---观察者模式
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 数据库巡检项
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • #Linux(帮助手册)
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (六)软件测试分工
  • (强烈推荐)移动端音视频从零到上手(上)
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)甲方乙方——赵民谈找工作
  • .ai域名是什么后缀?
  • .cn根服务器被攻击之后
  • .NET CLR基本术语
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .Net FrameWork总结
  • .net(C#)中String.Format如何使用
  • .NET的微型Web框架 Nancy
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /etc/skel 目录作用
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ C++ ] STL---仿函数与priority_queue
  • [20150629]简单的加密连接.txt