OpenCV4(C++)

您所在的位置:网站首页 怎么在cad中裁剪图片尺寸 OpenCV4(C++)

OpenCV4(C++)

2023-12-19 19:45| 来源: 网络整理| 查看: 265

文章目录 一、resize(缩放)二、filp(翻转)三、裁剪四、拼接

一、resize(缩放) void cv::resize( cv::InputArray src, // 输入图像 cv::OutputArray dst, // 输出图像 cv::Size dsize, // 目标图像尺寸 double fx = 0, // 沿水平轴的缩放因子 double fy = 0, // 沿垂直轴的缩放因子 int interpolation = INTER_LINEAR // 插值方法 ); interpolation:插值方法,用于确定如何处理图像的像素值。常见的插值方法有: cv::INTER_NEAREST:最近邻插值,使用离目标位置最近的像素值。 cv::INTER_LINEAR:双线性插值(默认),使用目标位置附近的四个像素值进行加权平均。 cv::INTER_CUBIC:双三次插值,在 INTER_LINEAR 基础上更加平滑,但计算成本更高。 cv::INTER_LANCZOS4:Lanczos 插值,通过 sinc 函数进行插值,可获得更好的质量和抗锯齿效果。

注:调整 dsize 参数或缩放因子 fx 和 fy 都可以控制图片大小变化,选择一个即可,另一个设定为0,如:

cv::Mat out0, out1; cv::resize(img, out0, cv::Size(520, 520), 0, 0); // 调整为520*520大小 cv::resize(img, out1, cv::Size(0, 0), 0.5, 0.5); // 调整为原图的0.5倍 cv::resize(img, out1, cv::Size(0, 0), 0.5, 0.5); // 调整为原图的2倍 二、filp(翻转) void cv::flip( cv::InputArray src, // 输入图像 cv::OutputArray dst, // 输出图像 int flipCode // 翻转模式 ); 常见的翻转模式有: 0:沿 x 轴翻转(水平翻转)。 1:沿 y 轴翻转(垂直翻转)。 -1:同时沿 x 和 y 轴翻转(水平和垂直翻转)。 //cv::Mat img_x, img_y, img_xy; //cv::flip(img, img_x, 0); // 沿x轴 //cv::flip(img, img_y, 1); // 沿y轴 //cv::flip(img, img_xy, -1); // 中心对称 三、裁剪

在 OpenCV 中,裁剪的常用方式有两种:cv::Rect 或 数组索引 cv::Range。 cv::Rect是定义裁剪区域的左上角坐标 (x, y) 和区域的宽度和高度。cv::Range是指定行或列的范围,以及像素之间的步长

cv::Mat image = cv::imread("input.jpg"); int x = 100; // 裁剪区域左上角的 x 坐标 int y = 100; // 裁剪区域左上角的 y 坐标 int width = 200; // 裁剪区域的宽度 int height = 150; // 裁剪区域的高度 //1、使用cv::Rect cv::Rect roi(x, y, width, height); cv::Mat croppedImage = image(roi); //2、使用数组索引 cv::Mat croppedImage = image(cv::Range(y, y + height), cv::Range(x, x + width));

通常,对一张图片进行裁剪时,采用的是网格裁剪的方法来固定每一小张裁剪图片的大小。下面是一个简单示例:

cv::Mat img = cv::imread("C:/Users/Opencv/temp/lena.png", 0); int rows = 2; // 网格行数 int cols = 2; // 网格列数 int grid_w = img.cols / cols; // 每个网格的宽度 int grid_h = img.rows / rows; // 每个网格的高度 int n = 0; for (int i = 0; i // 计算当前网格的左上角坐标 int src_x = j * grid_w; int src_y = i * grid_h; // 裁剪当前网格 cv::Rect roi(src_x, src_y, grid_w, grid_h); cv::Mat gridImg = img(roi); // 保存 string filename = "grid_" + to_string(n) + ".png"; cv::imwrite(filename, gridImg); ++n; } }

在这里插入图片描述

四、拼接 cv::Mat img1 = cv::imread("C:/Users/Opencv/temp/grid_0.png",0); cv::Mat img2 = cv::imread("C:/Users/Opencv/temp/grid_1.png",0); cv::Mat img3 = cv::imread("C:/Users/Opencv/temp/grid_2.png",0); cv::Mat img4 = cv::imread("C:/Users/Opencv/temp/grid_3.png",0); cv::Mat out1, out2, out; cv::hconcat(img1, img2, out1); // 横向拼接 cv::hconcat(img3, img4, out2); cv::vconcat(out1, out2, out); // 纵向拼接


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3