《学习OpenCV》摄像头影像处理

本文介绍了如何利用OpenCV库对电脑摄像头捕获的实时影像进行处理,包括各种图像操作和分析技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分别对电脑摄像头输入的影像进行各种处理。

#include "highgui.h"
#include "cv.h"
#include "stdio.h"
#include <opencv2/legacy/legacy.hpp>

//*****************************************************
//主函数
//*****************************************************
int main()
{
	/*从摄像头载入视频数据*/
	CvCapture *capture = NULL;
	capture = cvCreateCameraCapture(1);						//如果有两个摄像头,参数为1时使用USB外接摄像头,OUT_CAMERA

	/*判断视频信息是否有效*/
	if (!capture)
	{
		printf( "failed to open USB camera.\n" );
		return -1;
	}
	
	/*生成显示视频的窗口*/
	cvNamedWindow( "sorce", CV_WINDOW_NORMAL );
	cvNamedWindow( "gauss", CV_WINDOW_NORMAL );
	cvNamedWindow( "open", CV_WINDOW_NORMAL );
	cvNamedWindow( "gray", CV_WINDOW_NORMAL );
	cvNamedWindow( "pyramid", CV_WINDOW_NORMAL );
	cvNamedWindow( "thresh", CV_WINDOW_NORMAL );

	/*定义视频帧与对帧进行图像处理后的各个图像*/
	IplImage *frame, *gauss, *open, *gray, *pyramid, *thresh;

	/*对金字塔分割作准备*/
	CvSeq* comp = NULL;
	CvMemStorage* storage=cvCreateMemStorage(0);
	assert( storage!=NULL );

	while (1)												
	{
		/*抽取帧*/
		frame = cvQueryFrame( capture );

		/*图像初始化*/		
		gauss = cvCreateImage( cvGetSize(frame), frame->depth, frame->nChannels );
		open = cvCreateImage( cvGetSize(frame), frame->depth, frame->nChannels );
		gray = cvCreateImage( cvGetSize(frame), frame->depth, 1 );
		pyramid = cvCreateImage( cvGetSize(frame), frame->depth, frame->nChannels );
		thresh = cvCreateImage( cvGetSize(frame), frame->depth, 1 );

		/*高斯模糊处理,输出gauss*/
		cvSmooth( frame, gauss, CV_GAUSSIAN, 11, 11 );
		/*开运算,输出open*/
		cvErode( frame, open );								
		cvDilate( open, open );
		/*色彩处理,输出单通道灰度图像gray*/
		cvCvtColor( frame, gray, CV_RGB2GRAY );
		/*金字塔分割,输出pyramid*/
		cvPyrSegmentation( frame, pyramid, storage, &comp, 4, 130, 30 );
		/*阈值化,输出thresh*/
		cvThreshold( gray, thresh, 200, 255, CV_THRESH_BINARY );

		if (!frame)
			break;
		/*循环显示图像,即播放视频*/
		cvShowImage( "sorce", frame );
		cvShowImage( "gauss", gauss );
		cvShowImage( "open", open );
		cvShowImage( "gray", gray );
		cvShowImage( "pyramid", pyramid );
		cvShowImage( "thresh", thresh );
		/*按ESC键退出*/
		char c = cvWaitKey(33);
		if (c==27) 
			break;   
	}    
	cvReleaseCapture( &capture );  
	cvDestroyAllWindows();

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值