常用模板

本文介绍了一个使用OpenCV库进行图像处理的程序。该程序读取一系列图像文件及对应的坐标位置文件,根据坐标信息从原始图像中裁剪出指定区域,并将其保存为新的图像文件。此过程涉及图像加载、坐标读取、区域裁剪与图像保存等关键技术步骤。
#include <opencv2/opencv.hpp>
#include <cstdio>
#include <cstdlib>
#include <Windows.h>
#include <iostream>
#include <fstream>

typedef struct location
{
	int x;
	int y;
};
int main()
{
	// 载入图像
	char pstrImageName[100];
	char pstrlocationName[100];
	for (int fileinput = 1; fileinput <= 139; fileinput++)
	{
		sprintf(pstrImageName, "E:\\VS项目管理\\generateFace\\FrontScenedistribute\\images\\%d.bmp", fileinput);//debug 路径名字写不对则图片不输出。
		sprintf(pstrlocationName, "E:\\VS项目管理\\generateFace\\FrontScenedistribute\\images\\annotations\\%d.txt", fileinput);
		IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED);
		ifstream in(pstrlocationName);
		if (pSrcImage && in)
		{

			char str[255];
			int filename = 0;
			while (in.getline(str, 255)){//输入一行;回车即停止
				stringstream ss(str);
				location r;
				ss >> r.x;
				ss >> r.y;

				int width = 50;
				int height = 60;
				
				CvRect cvRect;
				cvRect.x = max(r.x - width / 2, 0);
				cvRect.y = max(r.y - width / 2, 0);
				cvRect.width =  min(r.x + width / 2, pSrcImage->width) - cvRect.x;
				cvRect.height = min(r.y + height / 2, pSrcImage->height) - cvRect.y;
				width = cvRect.width;
				height = cvRect.height;
				CvSize size = cvSize(width, height);//区域大小
				IplImage* pDest = cvCreateImage(size, pSrcImage->depth, pSrcImage->nChannels);//创建目标图像
				cvSetImageROI(pSrcImage, cvRect);//设置源图像ROI

				cvResize(pSrcImage, pDest);//缩放img图像,并将数据拷贝到img1 cvResize(src, dst, CV_INTER_LINEAR); //缩放源图像到目标图像   
				//cvCopy(pSrcImage, pDest); //复制图像


				cvResetImageROI(pSrcImage);//这句是必须的,在img1的ROI区域显示img
				char str[200] = { 0 };
				/*if (filename == 0)
				{
					IplImage *exist = NULL;
					do{
						filename++;
						sprintf(str, "E:\\VS项目管理\\generateFace\\FrontScenedistribute\\images\\positive\\%d_%d_positive.bmp", fileinput,filename);
						exist = cvLoadImage(str, CV_LOAD_IMAGE_UNCHANGED);
					} while (exist);
					cvReleaseImage(&exist);
					cvSaveImage(str, pDest);//保存目标图像
				}
				else*/
				{
					filename++;
					sprintf(str, "E:\\VS项目管理\\generateFace\\FrontScenedistribute\\images\\positive\\%d_%d_positive.bmp", fileinput, filename);
					cvSaveImage(str, pDest);//保存目标图像
				}
				
				cvReleaseImage(&pDest);
			}
			cvReleaseImage(&pSrcImage);
		}
	}


	return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值