当前位置:   article > 正文

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

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

测试环境

vs2019

opencv==4.8.0

【效果演示】

【核心实现代码】

  1. //图像剪切
  2. //参数:src为源图像, dst为结果图像, rect为剪切区域
  3. //返回值:返回0表示成功,否则返回错误代码
  4. int imageCrop(InputArray src, OutputArray dst, Rect rect)
  5. {
  6. Mat input = src.getMat();
  7. if (input.empty()) {
  8. return -1;
  9. }
  10. //计算剪切区域: 剪切Rect与源图像所在Rect的交集
  11. Rect srcRect(0, 0, input.cols, input.rows);
  12. rect = rect & srcRect;
  13. if (rect.width <= 0 || rect.height <= 0) return -2;
  14. //创建结果图像
  15. dst.create(Size(rect.width, rect.height), src.type());
  16. Mat output = dst.getMat();
  17. if (output.empty()) return -1;
  18. try {
  19. //复制源图像的剪切区域 到结果图像
  20. input(rect).copyTo(output);
  21. return 0;
  22. }
  23. catch (...) {
  24. return -3;
  25. }
  26. }
  27. //======================== 主程序开始 ==========================
  28. static string window_name = "Draw a Rect to crop";
  29. static Mat src; //源图片
  30. bool isDrag = false;
  31. Point point1; //矩形的第一个点
  32. Point point2; //矩形的第二个点
  33. static void callbackMouseEvent(int mouseEvent, int x, int y, int flags, void* param)
  34. {
  35. switch (mouseEvent) {
  36. case EVENT_LBUTTONDOWN:
  37. point1 = Point(x, y);
  38. point2 = Point(x, y);
  39. isDrag = true;
  40. break;
  41. case EVENT_MOUSEMOVE:
  42. if (isDrag) {
  43. point2 = Point(x, y);
  44. Mat dst = src.clone();
  45. Rect rect(point1, point2); //得到矩形
  46. rectangle(dst, rect, Scalar(0, 0, 255));//画矩形
  47. imshow(window_name, dst); //显示图像
  48. }
  49. break;
  50. case EVENT_LBUTTONUP:
  51. if (isDrag) {
  52. isDrag = false;
  53. Rect rect(point1, point2); //得到矩形
  54. imageCrop(src, src, rect); //图像剪切
  55. imshow(window_name, src); //显示图像
  56. }
  57. break;
  58. }
  59. return;
  60. }

 【完整演示代码下载】

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/975306
推荐阅读
相关标签
  

闽ICP备14008679号