qt,opencv数字图像处理,图片裁剪
qt,opencv数字图像处理,图片裁剪并保存
·
有的时候图片必须要经过裁剪才能进行一系列处理,这里举一个例子。
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;
}
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)