有的时候图片必须要经过裁剪才能进行一系列处理,这里举一个例子。

1、在.pro文件配置opencv的库,加上以下代码:

win32:CONFIG(release, debug|release): LIBS += -LD:/MY_Software/opencv4.5.1/opencv4.5.1/opencv/build/x64/vc14/lib/ -lopencv_world451
else:win32:CONFIG(debug, debug|release): LIBS += -LD:/MY_Software/opencv4.5.1/opencv4.5.1/opencv/build/x64/vc14/lib/ -lopencv_world451d

INCLUDEPATH += D:/MY_Software/opencv4.5.1/opencv4.5.1/opencv/build/include
DEPENDPATH += D:/MY_Software/opencv4.5.1/opencv4.5.1/opencv/build/include

路径可以根据你自己的电脑安装路径改。

2、读取图像,并获取图像的长度与宽度

    // 读取图像
    cv::Mat image = cv::imread("C:/Users/Andy/Desktop/picture/pipe6.jpg");
    if (image.empty())
    {
        std::cerr << "Could not open or find the image" << std::endl;
        return -1;
    }

    // 获取图像的高度和宽度
    int height = image.rows;
    int width = image.cols;

3、计算裁剪区域

    //***********************暂定***********************
    // 计算裁剪区域
    int roiY = height * 0.2;  // 起始 y 坐标
    int roiHeight = height * 0.6;  // 裁剪高度
    int roiX = 0;  // 起始 x 坐标
    int roiWidth = width;  // 裁剪宽度

我这里是对图片y轴方向,也就是纵向进行裁剪,减去上20%的区域以及下20%的区域。所以起始为height*0.2,裁剪掉height*0.6,就剩下下面的20%,即裁出来中间的60%。如果你的裁剪区域以及方向不同可以按你的来改。

4、创建裁剪区域并保存

我这里裁剪后的图片命名为pipe1.jpg、pipe2.jpg......后面可以加一个i++,做一个循环来实现对批量图片的处理。

    // 创建裁剪区域(ROI)
    cv::Rect roi(roiX, roiY, roiWidth, roiHeight);
    cv::Mat croppedImage = image(roi);

    // 指定保存路径和图片编号
    std::string savePath = "C:\\Users\\Andy\\Desktop\\located\\picture\\croppedImage\\";
    int i = 1;
    std::string fileName = "pipe" + std::to_string(i) + ".jpg";
    std::string fullPath = savePath + fileName;

    // 保存裁剪后的图像
    if (cv::imwrite(fullPath, croppedImage))
    {
        std::cout << "Image cropped and saved successfully to: " << fullPath << std::endl;
    }
    else
    {
        std::cout << "Failed to save the cropped image to: " << fullPath << std::endl;
    }

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐