opencv保存选择图像中的区域(二)
/*
* =====================================================================================
*
* Filename: resize.cpp
* Environment:
* Description: 图像list为参数输入程序,resize后的图像在picture_resize下
*
*
* Version: 1.0
* Created: 2013/10/15 12:23:51
* Author: yuliyang
I*
* Mail: wzyuliyang911@gmail.com
* Blog: http://www.cnblogs.com/yuliyang
*
* =====================================================================================
*/ #include "opencv\cv.h"
#include "opencv\highgui.h"
#include <math.h>
#include "windows.h"
#include "fstream"
#include <cstdlib>
#include <string.h>
using namespace std;
static int n=;
static char savename_resize[];
int main(int argc, char* argv[])
{ /*-----------------------------------------------------------------------------
* 创建目标目录,保存resize图像
* DOS命令
*-----------------------------------------------------------------------------*/
system("md .\\picture_resize");
IplImage *src = ; //源图像指针
IplImage *dst = ; //目标图像指针
CvSize dst_cvsize; //目标图像尺寸
dst_cvsize.width=;
dst_cvsize.height=;
string buf;
ifstream svm_data(argv[]);//训练样本图片的路径都写在这个txt文件中,使用bat批处理文件可以得到这个txt文件
while (svm_data)
{
if (getline(svm_data,buf))
{ printf("processing %s...\n",buf.c_str());
src = cvLoadImage(buf.c_str());
dst = cvCreateImage( dst_cvsize, src->depth, src->nChannels); //构造目标图象
cvResize(src, dst, CV_INTER_LINEAR); //缩放源图像到目标图像
sprintf(savename_resize,".//picture_resize//resize%03dr.bmp",n);
cvSaveImage(savename_resize,dst);
n++;
cvReleaseImage(&src); //释放源图像占用的内存
cvReleaseImage(&dst); //释放目标图像占用的内存
}
} svm_data.close(); /*-----------------------------------------------------------------------------
* bat批处理:
*
* 在num.txt文件中的偶数行插入数字0,分类器的label
*
setlocal enabledelayedexpansion
for /f "delims= " %%a in (num.txt) do (
set /a line =0
echo %%a >>0.txt
echo !line! >>0.txt
) 将目录下的所以文件名写入num.txt文件里
dir /b/s/p/w *.bmp > num.txt 将所有0.txt - 9.txt内的内容全部写入到hb.txt
@echo off
set d=d:\nums
pushd %d%
del hb.tmp 2>nul
for /f "tokens=*" %%i in ('dir/b/s *.txt') do type "%%i">>hb.txt
ren hb.tmp hb.txt
popd *
*-----------------------------------------------------------------------------*/ /* the first command line parameter must be image file name */
// src = cvLoadImage(argv[1]);
// dst_cvsize.width = src->width * scale; //目标图像的宽为源图象宽的scale倍
// dst_cvsize.height = src->height * scale; //目标图像的高为源图象高的scale倍
// return ;
}
/*
* =====================================================================================
*
* Filename: select2save.cpp
* Description: 获取感兴趣的选区,自动创建目录和resize大小
* 环境:opencv2.4.4和vs2010
*
*
* Version: 2
* Created: 2013/10/14 19:52:09
* Author: yuliyang
* Weibo: @礼杨_HDU
* Mail: wzyuliyang911@gmail.com
* Blog: http://www.cnblogs.com/yuliyang
*
* =====================================================================================
*/
#include "opencv\cv.h"
/*-----------------------------------------------------------------------------
* 很奇怪的的是cvresize()在这个头文件里,加了它才有定义,否则编译会说函数未定义
*-----------------------------------------------------------------------------*/
#include "opencv\highgui.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <stdio.h>
#include <math.h>
using namespace cv; IplImage* org = ;
IplImage* img = ;
IplImage* tmp = ;
IplImage* dst = ;
IplImage* dst_resize = ;
static int n=;
static char savename[];
static char savename_resize[];
void on_mouse( int event, int x, int y, int flags, void* ustc)
{
static CvPoint pre_pt = {-,-};
static CvPoint cur_pt = {-,-};
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, , , CV_AA);
char temp[];
char lenth_and_height[]; if( event == CV_EVENT_LBUTTONDOWN )
{
cvCopy(org,img);
sprintf(temp,"(%d,%d)",x,y);
pre_pt = cvPoint(x,y);
cvPutText(img,temp, pre_pt, &font, cvScalar(,, , ));
cvCircle( img, pre_pt, ,cvScalar(,,,) ,CV_FILLED, CV_AA, );
cvShowImage( "img", img );
cvCopy(img,tmp);
}
else if( event == CV_EVENT_MOUSEMOVE && !(flags & CV_EVENT_FLAG_LBUTTON))
{
cvCopy(tmp,img);
sprintf(temp,"(%d,%d)",x,y);
cur_pt = cvPoint(x,y);
cvPutText(img,temp, cur_pt, &font, cvScalar(,, , ));
cvShowImage( "img", img );
}
else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))
{
cvCopy(tmp,img);
sprintf(temp,"(%d,%d)",x,y);
cur_pt = cvPoint(x,y);
cvPutText(img,temp, cur_pt, &font, cvScalar(,, , ));
cvRectangle(img, pre_pt, cur_pt, cvScalar(,,,), , , );
sprintf(lenth_and_height,"(Width:%d,Height:%d)",abs(cur_pt.x-pre_pt.x),abs(cur_pt.y-pre_pt.y));
/*-----------------------------------------------------------------------------
*
*
* 为了方便随时查看自己选区的宽度和高度,特意加了一个点,该点计算为取矩形窗左上点和右下点的中点
*
*
*-----------------------------------------------------------------------------*/
CvPoint origin;
origin.x=(pre_pt.x+cur_pt.x)/;
origin.y=(pre_pt.y+cur_pt.y)/;
cvPutText(img,lenth_and_height, origin, &font, cvScalar(,, , ));
cvShowImage( "img", img );
}
else if( event == CV_EVENT_LBUTTONUP )
{
cvCopy(tmp,img);
sprintf(temp,"(%d,%d)",x,y);
cur_pt = cvPoint(x,y);
cvPutText(img,temp, cur_pt, &font, cvScalar(,, , ));
cvCircle( img, cur_pt, ,cvScalar(,,,) ,CV_FILLED, CV_AA, );
cvRectangle( img, pre_pt, cur_pt, cvScalar(,,,), , , );
cvShowImage( "img", img );
cvCopy(img,tmp);
int width=abs(pre_pt.x-cur_pt.x);
int height=abs(pre_pt.y-cur_pt.y);
if(width== || height==)
{
cvDestroyWindow("dst");
return;
}
dst=cvCreateImage(cvSize(width,height),org->depth,org->nChannels);
CvRect rect;
if(pre_pt.x<cur_pt.x && pre_pt.y<cur_pt.y)
{
rect=cvRect(pre_pt.x,pre_pt.y,width,height);
}
else if(pre_pt.x>cur_pt.x && pre_pt.y<cur_pt.y)
{
rect=cvRect(cur_pt.x,pre_pt.y,width,height);
}
else if(pre_pt.x>cur_pt.x && pre_pt.y>cur_pt.y)
{
rect=cvRect(cur_pt.x,cur_pt.y,width,height);
}
else if(pre_pt.x<cur_pt.x && pre_pt.y>cur_pt.y)
{
rect=cvRect(pre_pt.x,cur_pt.y,width,height);
}
cvSetImageROI(org,rect);
cvCopy(org,dst); /*-----------------------------------------------------------------------------
* 定义保存图像的大小
*-----------------------------------------------------------------------------*/
CvSize dst_cvsize;
dst_cvsize.width=;
dst_cvsize.height=;
dst_resize = cvCreateImage( dst_cvsize, org->depth, org->nChannels);
cvResize(org, dst_resize, CV_INTER_LINEAR); cvResetImageROI(org);
cvDestroyWindow("dst");
//cvNamedWindow("dst",1);
//cvShowImage("dst",dst); /*-----------------------------------------------------------------------------
* 保存未resize的图像
*-----------------------------------------------------------------------------*/
sprintf(savename,".\\picture\\save%03d.bmp",n);
/*-----------------------------------------------------------------------------
* 保存在resize文件夹下
*-----------------------------------------------------------------------------*/
sprintf(savename_resize,".\\picture_resize\\save%03dr.bmp",n); cvSaveImage(savename,dst);
cvSaveImage(savename_resize,dst_resize);
n++;
}
}
int main(int argc, char *argv[])
{ /*-----------------------------------------------------------------------------
* 用DOS命令创建文件夹,用于分类resize和未resize的原图像
*-----------------------------------------------------------------------------*/
system("md .\\picture_resize");
system("md .\\picture");
org=cvLoadImage(argv[],);
img=cvCloneImage(org);
tmp=cvCloneImage(org);
cvNamedWindow("img",);
cvSetMouseCallback( "img", on_mouse, ); cvShowImage("img",img);
cvWaitKey();
cvDestroyAllWindows();
cvReleaseImage(&org);
cvReleaseImage(&img);
cvReleaseImage(&tmp);
cvReleaseImage(&dst);
return ;
}
opencv保存选择图像中的区域(二)的更多相关文章
- opencv保存选择图像中的区域
在自己建立行人检测的图像库时用到,参考别人的修改了一下: #include "opencv2/core/core.hpp" #include "opencv2/highg ...
- Halcon学习之六:获取Image图像中Region区域的特征参数
area_center_gray ( Regions, Image : : : Area, Row, Column ) 计算Image图像中Region区域的面积Area和重心(Row,Colu ...
- 【OpenCV】访问图像中每个像素的值
http://blog.csdn.net/xiaowei_cqu/article/details/7557063
- 【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- (转)使用Python和OpenCV检测图像中的物体并将物体裁剪下来
原文链接:https://blog.csdn.net/liqiancao/article/details/55670749 介绍 硕士阶段的毕设是关于昆虫图像分类的,代码写到一半,上周五导师又给我新的 ...
- 深入学习OpenCV检测及分割图像的目标区域
准备1:OpenCV常用图片转换技巧 在进行计算机视觉模型训练前,我们经常会用到图像增强的技巧来获取更多的样本,但是有些深度学习框架中的方法对图像的变换方式可能并不满足我们的需求,所以掌握OpenCV ...
- 图像的ROI区域选择与复制
[opencv学习笔记六]图像的ROI区域选择与复制 孜然 7 人赞同了该文章 图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感 ...
- C#使用OpenCV剪切图像中的圆形和矩形
前言 本文主要介绍如何使用OpenCV剪切图像中的圆形和矩形. 准备工作 首先创建一个Wpf项目--WpfOpenCV,这里版本使用Framework4.7.2. 然后使用Nuget搜索[Emgu.C ...
- matlab中如何将视频保存成图像
利用MATLAB将视频的每一帧保存成一幅图像,并自动命名.本文方法简单,容易学习. 首先,读入视频.代码如下: mov = VideoReader('xxxxxx.avi'); % 将xxxxxx.a ...
随机推荐
- C# IO流的操作
C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...
- JS 获取 路径参数 传入 参数名 截取 & 和 # 之前 字符
function getQueryStringByName(name) { var result = location.search.match(new RegExp("[\?\&] ...
- thinkphp表单上传文件并将文件路径保存到数据库中
上传单个文件,此文以上传图片为例,上传效果如图所示 创建数据库upload_img,用于保存上传路径 CREATE TABLE `seminar_upload_img` ( `id` int(11) ...
- Nginx禁止通过IP,未绑定域名访问服务器
这几天查看CNZZ统计后台看到,我的IP被两个未知的域名绑定了,为了避免被天朝和谐掉, 可以在Nginx上设置禁止通过IP访问服务器,只能通过绑定域名访问(同时设置未绑定域名返回500错误或者跳转到我 ...
- 在jsp中运用ajax实现同一界面不跳转处理事件
目前,编写应用程序时有两种基本的选择: 桌面应用程序 Web应用程序 它们有什么区别呢?桌面应用程序一般很快(就在您的计算机上运行,不用等待互联网连接),具有漂亮的用户界面(通常和操作系统有关)和非凡 ...
- “0x5003eaed” 指令引用的“0x00000000”内存。该内存不能为“read”
一.问题描述与原因分析 1.问题描述 使用VC6.0,在工具栏点击“打开文件”或者“添加文件到项目”的图标时,提示如题的错误. 2.原因分析 微软的VC6.0与office2007冲突问题. 二.解决 ...
- Vm image download resource
http://vmdepot.msopentech.com/List/Index http://www.hanselman.com/blog/Over400VirtualMachineImagesOf ...
- iOS工程引入ios-charts-master
前一段时间看到一个非常好的例子ios-charts-master,想在自己的工程中引用,但是一直没有成功,即使把整个工程原封不动的搬过来仍然,无济于事. 经过一次意外研究,终于成功了. 特记下集成过程 ...
- C# 启动进程和杀死进程
/// <summary> /// 杀死进程 /// </summary> private void KillProcesses() { var cfn = GetAppset ...
- HAProxy 的负载均衡服务器,Redis 的缓存服务器
问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...