打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++ 从一幅图片上裁取需要的区域

1、Mat

  1. Mat src, image_src; //原图
  2. Mat imageROI; //ROI区域
  3. Mat TempImg; //裁取出的区域存储为Mat
  4. int x_begin, y_begin, width, height; //裁取区域的坐标及大小
  5. int srcWidth, srcHeight; //存储原图宽、高
  6. //赋初值
  7. x_begin = 0;
  8. y_begin = 0;
  9. width = 100;
  10. height = 100;
  11. //读取原图
  12. src = imread("test.jpg", 1);
  13. if(!src.data){
  14. cout<<" image read error!"<<endl;
  15. return -1;
  16. }
  17. srcWidth = src.cols; //获取原图宽、高
  18. srcHeight = src.rows;
  19. //控制裁取区域不超过原图
  20. if(width < 1 || height < 1 || width > srcWidth || height > srcHeight){
  21. LOOGE<<"[Rect error: srcWidth = "<<srcWidth<<", srcHeight = "<<srcHeight<<", x_begin = "
  22. <<x_begin<<", y_begin = "<<y_begin<<", width = "<<width<<", height = "<<height<<" ]";
  23. return -1;
  24. }
  25. if(x_begin + width > srcWidth)
  26. width = srcWidth - x_begin;
  27. if(y_begin + height > srcHeight)
  28. height = srcHeight - y_begin;
  29. 2、IplImage
    1. int x_begin, y_begin, width, height; //裁取区域的坐标及大小
    2. int srcWidth, srcHeight; //原图宽、高
    3. //赋初值
    4. x_begin = 0;
    5. y_begin = 0;
    6. width = 100;
    7. height = 100;
    8. //读取原图
    9. IplImage* src = cvLoadImage("test.jpg", 1);
    10. if(!src){
    11. cout<<" image read error!"<<endl;
    12. cvReleaseImage(&src);
    13. return -1;
    14. }
    15. srcWidth = image->width; //获取原图宽、高
    16. srcHeight = image->height;
    17. //控制裁取区域不超过原图
    18. if(width < 1 || height < 1 || width > srcWidth || height > srcHeight){
    19. LOOGE<<"[Rect error: srcWidth = "<<srcWidth<<", srcHeight = "<<srcHeight<<", x_begin = "
    20. <<x_begin<<", y_begin = "<<y_begin<<", width = "<<width<<", height = "<<height<<" ]";
    21. cvReleaseImage(&src);
    22. return -1;
    23. }
    24. if(x_begin + width > srcWidth)
    25. width = srcWidth - x_begin;
    26. if(y_begin + height > srcHeight)
    27. height = srcHeight - y_begin;
    28. //区域裁取
    29. IplImage* image_src = cvCloneImage(src); //备份原图
    30. cvSetImageROI(image_src, cvRect(x_begin, y_begin, width, height)); //设置待裁取ROI
    31. IplImage* dst = cvCreateImage(cvSize(width, height), src->depth, src->nChannels); //创建裁取区域大小的IplImage*
    32. cvCopy(image_src, dst); //将ROI区域拷贝至dst
    33. //释放资源
    34. cvReleaseImage(&src);
    35. cvResetImageROI(image_src);
    36. cvReleaseImage(&image_src);
    //区域裁取
  30. image_src = src.clone(); //备份原图
  31. imageROI = image_src(Rect(x_begin, y_begin, width, height)); //设置待裁取ROI
  32. imageROI.convertTo(TempImg, TempImg.type()); //将ROI区域拷贝至ds
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
夏天趕走蟑螂、蚂蚁、蚊子的好方法?(转载)
易经古解与风水今用上
讲故事说比喻 生活之中悟太极
(1258)论正宗峦头风水 上
健康与养生大全(一)
象形字分部检索
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服