19,468
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include"cv.h"
#include"highgui.h"
#include"stdio.h"
#include <iostream>
using namespace std;
// 实现将拍下来的图片缩放一倍
IplImage* DoPyrDown(IplImage* image, int filter = IPL_GAUSSIAN_5x5)
{
// 设置大小缩小一倍
CvSize size = cvSize(image->width / 2,image->height / 2);
//初始化图片
IplImage* outImage = cvCreateImage(size,image->depth,image->nChannels);
//IplImage* outImage1 = cvCreateImage(size,image->depth,image->nChannels);
//实现缩放
cvPyrDown(image,outImage);
CvScalar s;
int sum=0;
for (int i=0;i<outImage->height;i++)
{
for (int j=0;j<outImage->width;j++)
{
s = cvGet2D(outImage,i,j);
//cout<<s.val[0]<<" "<<s.val[1]<<" "<<s.val[2]<<endl;
sum = (s.val[0]+s.val[1]+s.val[2])/3;
if (sum > 128)
{
s.val[0]=s.val[1]=s.val[2]=255;
cvSet2D(outImage,i,j,s);
}
else
{
s.val[0]=s.val[1]=s.val[2]=0;
cvSet2D(outImage,i,j,s);
}
}
}
//cvCvtColor(outImage,outImage1,CV_RGB2RGBA);
char* filename ="C:\Documents and Settings\abc\My Documents\light test\Assets\Standard Assets\Light Cookies\test.jpg";
cvSaveImage("test1.jpg",outImage);
//cvReleaseImage(&outImage);
return outImage;
}
int main(int argc, char** argv)
{
cvNamedWindow("vedio");
CvCapture* capture;
// 首先是要通过摄像设备来得到一个CvCapture对象
if(1 == argc)
{
capture = cvCreateCameraCapture(0);
}
else
{
capture = cvCreateCameraCapture(atoi(argv[1]));
}
assert(NULL != capture);
IplImage* frame;
IplImage* img;
char keyCode;
// 每隔30ms捕捉一次视频图像
// 可以设为while(1) 使得实时捕捉视频画面
while((keyCode = cvWaitKey(30)))
{
//表示按下了ESC键,退出
if(keyCode == 27)
{
break;
}
// 得到摄像设备的下一帧图像
frame = cvQueryFrame(capture);
if(!frame)
{
break;
}
IplImage* outImage = cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels);
// // // 将原图拷贝过来
cvCopy(frame,outImage,NULL);
img = DoPyrDown(outImage);
//cvReleaseImage(&img);
cvShowImage("vedio",img);
}
cvReleaseImage(&img);
cvDestroyAllWindows();
return 0;
}