C++ opencv 将图片分为任意N等分,并保存所有子图片于本地
C++ opencv 将图片分为任意N等分,并保存所有子图片于本地(第一次写博客,格式不对之处,请原谅)
#include
#include
#include
#include
using namespace cv;
using namespace std;
int cnt = 1;
int num = 1;
char temp_file[5];
string filename;
string path;
int main()
{
vector
int subImageNum = 4; // 给原图分16块
Mat src;
//Mat subImages;
printf("1111\n");
//std::cout<
src = imread("/home/swl/Desktop/use/000003.jpg",-1);
/*
第一个参数是图片的绝对地址
第二个参数表示图片读入的方式(flags可以缺省,缺省时flags=1,表示以彩色图片方式读入图片)
flags>0时表示以彩色方式读入图片
flags=0时表示以灰度图方式读入图片
flags<0时表示以图片的本来的格式读入图片
*/
imshow("123", src); //“123”是显示框的 名字
waitKey(0);
destroyAllWindows();
//std::cout<
/*
if(!src.data){
cout<<"source image error! [subImageExtract()]"<
}
*/
subImages.clear();
printf("1\n");
//cout<< subImages<
得到原图的宽高
int srcHeight, srcWidth, subHeight, subWidth;
srcHeight = src.rows; 获取原图宽、高
srcWidth = src.cols;
subHeight = srcHeight / subImageNum;
subWidth = srcWidth / subImageNum;
//std::cout<
给原图分块
for(int j = 0; j < subImageNum; j++)
{ for(int i = 0; i < subImageNum; i++)
{
if(j < subImageNum - 1 && i < subImageNum - 1){
cv::Mat temImage(subHeight, subWidth, CV_8UC3, cv::Scalar(0,0,0));
cv::Mat imageROI = src(cv::Rect(i * subWidth, j * subHeight, temImage.cols, temImage.rows));
cv::addWeighted(temImage, 1.0, imageROI, 1.0, 0., temImage);
subImages.push_back(temImage);
}else{
cv::Mat temImage(srcHeight - (subImageNum - 1) * subHeight, srcWidth - (subImageNum - 1) * subWidth, CV_8UC3, cv::Scalar(0,0,0));
cv::Mat imageROI = src(cv::Rect(i * subWidth, j * subHeight, temImage.cols, temImage.rows));
cv::addWeighted(temImage, 1.0, imageROI, 1.0, 0., temImage);
subImages.push_back(temImage);
}
}
std::cout<
///将子图保存下来
int n = 0;
vector
while (it != subImages.end())
{
Mat tmp = *it;
stringstream ss;
ss << n;
n++;
imwrite(ss.str() + ".jpg", tmp);
//imshow("/home/swl/Desktop/use/mseg/", tmp);
it++;
waitKey(10);
}
printf("44\n");
return 0;
}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
