分享

C++opencv图像裁剪、等比例放大缩小...

 行走在理想边缘 2021-09-08

描述

C++使用opencv时,对imshow图像进行的常见处理,包括图像剪裁、等比例压缩等(待继续补充)

代码

1. 剪裁

int matrix_size = 3000;
cv::Mat image(matrix_size, matrix_size, CV_8UC3, cv::Scalar(255, 255, 255)); // 原图
cv::Mat image_part = image(cv::Rect(1400,1100,1000,1800)); // 裁剪后的图
cv::imshow("part of original image", image_part);
cv::waitKey(5);

代码中
cv::Rect是opencv画的矩形,四个参数分别为矩形(左上角的column值,左上角的row值,矩形column方向上的宽,矩形row方向上的宽)

2. 等比例缩小

int matrix_size = 3000;
cv::Mat image(matrix_size, matrix_size, CV_8UC3, cv::Scalar(255, 255, 255)); // 原图
cv::Mat image_mini; // 等比例缩小图
resize(image, image_mini, cv::Size(matrix_size/3, matrix_size/3)); // 缩小操作
cv::imshow("mini of original image", image_mini);
cv::waitKey(5);

3. 等比例放大

int matrix_size = 3000;
cv::Mat image(matrix_size, matrix_size, CV_8UC3, cv::Scalar(255, 255, 255)); // 原图
cv::Mat image_max; // 等比例放大图
resize(image, image_max, Size(matrix_size * 2, matrix_size * 2)); // 放大操作
cv::imshow("max of original image", image_max);
cv::waitKey(5);

resize()函数的参数

void cv::resize (InputArray src,
OutputArray dst,
Size dsize,
double fx = 0,
double fy = 0,
int interpolation = INTER_LINEAR

参数含义

  • src(必填): 原图像

  • dst(必填): 变换后的图像

  • dsize(必填): 写法cv::Size(col, row),变换后的图像尺寸

  • fx 和 fy(自由选填): 缩放系数,1为不变,<1缩小,>1放大。如果 Size 被设置的话,则根据 Size 做缩放插值;如果没写Size,需要根据 fx 和 fy 做缩放插值。
    以下两种写法一致

    resize(image, image_mini, cv::Size(image.cols/2, image.rows));
    resize(image, image_mini, cv::Size(), 0.5, 1);
    
  • interpolation(自由选填): 插值算法,自行去研究,不填写就是默认为0, 也就是最近点插值INTER_NEAREST

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多