opencv将图片分成多个256*256像素的小图片
来源:互联网 发布:淘宝买家秀链接在哪里 编辑:程序博客网 时间:2024/06/05 14:25
作者:恋上蛋炒面
转自:http://blog.csdn.net/skeeee/article/details/8864481
想将一张大图片分成256*256像素的多个小图片,网上搜了很多资料,知道opencv的API中没有这样的函数,只能自己实现。
实现程序环境:
opencv版本:opencv2.4.4
编译环境:vs2010
操作系统:xp
我的实现方法有4步:
1)将图片转化为长宽都是2的幂次的图片,使用resize函数。(根据本文的图片素材,转化成4096*2048像素)
- cv::resize(img,result,cv::Size(4096,2048));
2)用for循环,从坐上角依次选取256*256的矩形ROI(感兴趣区域)
3)将选取的ROI复制到临时tempimage中,添加到vector<cv::Mat>中
- int m,n;
- m = image.rows/height;
- n = image.cols/width;
- vector<cv::Mat> imgOut;
- for (int j = 0;j<m;j++)
- {
- for(int i = 0;i<n;i++)
- {
- cv::Mat temImage(height,width,CV_8UC3,cv::Scalar(0,0,0));//mat(rows,cols,)
- cv::Mat imageROI = image(cv::Rect(i*width,j*height,temImage.cols,temImage.rows));//rect(x, y, width, height)选定感兴趣区域
- cv::addWeighted(temImage,1.0,imageROI,1.0,0.,temImage);//复制扫描出的边界内数据
- imgOut.push_back(temImage);
- }
- }
4)最后将vector<cv::Mat>中的图片按顺序写入到jpg中
- <span style="white-space:pre"> </span>vector<cv::Mat>::iterator it = imgDiv.begin();
- while(it!=imgDiv.end())
- {
- cv::imwrite(imagename,*it);
- if ((++imagename[2]) == 58)
- {
- imagename[2] = '0';
- if ((++imagename[1])==58)
- {
- imagename[1] = '0';
- imagename[0]++;
- }
- }
- it++;
- }
astido.h
- #include <opencv2/highgui/highgui.hpp>
- #include <opencv2/core/core.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- #include <iostream>
- #include <string>
- using namespace cv;
- using namespace std;
- #define Dst_img_width 256
- #define Dst_img_height 256
- #include "astdio.h"
- #include <vector>
- vector<cv::Mat> division(cv::Mat &image,int width,int height);
division.cpp
- #include "division.h"
- vector<cv::Mat> division(cv::Mat &image,int width,int height)
- {
- char name = 1;
- int m,n;
- m = image.rows/height;
- n = image.cols/width;
- vector<cv::Mat> imgOut;
- for (int j = 0;j<m;j++)
- {
- for(int i = 0;i<n;i++)
- {
- cv::Mat temImage(height,width,CV_8UC3,cv::Scalar(0,0,0));//mat(rows,cols,)
- cv::Mat imageROI = image(cv::Rect(i*width,j*height,temImage.cols,temImage.rows));//rect(x, y, width, height)选定感兴趣区域
- cv::addWeighted(temImage,1.0,imageROI,1.0,0.,temImage);//复制扫描出的边界内数据
- imgOut.push_back(temImage);
- }
- }
- return imgOut;
- }
main.cpp
- #include "astdio.h"
- #include "division.h"
- int main()
- {
- string imagename = "000.jpg";
- cv::Mat img = cv::imread("image.jpg");
- if (!img.data)
- {
- cout<<"can't open img.jpg"<<endl;
- return -1;
- }
- cout<<"size of original.jpg is "<<img.cols<<"*"<<img.rows;
- cv::Mat result;
- cv::resize(img,result,cv::Size(4096,2048));
- cv::imwrite("result.jpg",result);
- vector<cv::Mat> imgDiv;
- imgDiv = division(result,Dst_img_width,Dst_img_height);
- vector<cv::Mat>::iterator it = imgDiv.begin();
- while(it!=imgDiv.end())
- {
- cv::imwrite(imagename,*it);
- if ((++imagename[2]) == 58)
- {
- imagename[2] = '0';
- if ((++imagename[1])==58)
- {
- imagename[1] = '0';
- imagename[0]++;
- }
- }
- it++;
- }
- }
源程序下载:
http://download.csdn.net/detail/skeeee/5322934 0 0
- opencv将图片分成多个256*256像素的小图片
- opencv将图片分成多个256*256像素的小图片
- 将一张图片分成多个区域设置多个超链接
- 将所需要的小图标放在一图片中,用像素定位图片
- opencv取图片像素的方法
- OpenCV-005:图片的基本像素操作
- opencv将整数像素图片转化为浮点型
- OpenCV遍历图片像素点
- 将图片等分成若干张分图
- [JS]HTML中把图片划分成多个作用区域的区域标记
- 3像素bug div里的图片距离div下边框多3个像素
- OpenCV-Mat方式的获取图片的像素(一)
- opencv如何获得图片所有像素点的坐标
- OpenCV创建轨迹条,图片像素的访问
- openCV遍历图片像素方式的时间效率对比
- 通过OpenCV修改图片某一像素的数值 Python实现
- OpenCV-Mat方式获取图片的像素(二)
- OpenCV 中读取一张图片的像素点,并显示
- (十一)Menu及其使用
- ArcGIS for Android 例子Offline Editor (BETA)(五)
- VBA for Word 学习笔记(一)
- POJ:2356 Find a multiple(鸽巢原理)
- 两个开源的社会网络分析工具(NodeXL,ORA)
- opencv将图片分成多个256*256像素的小图片
- Java jdbc数据库连接池总结!
- Android仿易信界面SlidingMenu左右滑动
- 学习和应用社会网络分析,为什么要选用Pajek
- windows文件中的中文在ubuntu下乱码
- ThreadPoolExecutor使用和思考
- hdu2003解题报告
- 关于Map表循环过程删除操作出现的java.util.ConcurrentModificationException 异常
- 升级Python后中文输入法不显示候选词的解决