学习Opencv

// 显示视频中的轮廓信息
#include "../inc/opencv/cv.h"
#include "../inc/opencv/cvaux.h"
#include "../inc/opencv/cxcore.h"
#include "../inc/opencv/highgui.h"
using namespace cv;

#pragma comment(lib, "../../lib/cv200.lib")
#pragma comment(lib, "../../lib/cxcore200.lib")
#pragma comment(lib, "../../lib/highgui200.lib")

#include <iostream>
#include <string.h>
using namespace std;


int main(int argc, char** argv)
{
	CvCapture* cap;
	if(argc < 2)
		cap = cvCaptureFromCAM(0);
	else
		cap = cvCaptureFromAVI(argv[1]);

	if(!cvGrabFrame(cap)){
		if(argc == 1){
			cout << "No camera detected!" << endl;
			return -1;
		}
		else{
			cout << "AVI file not found!" << endl;
			return -1;
		}
	}
	cvNamedWindow("show video edge",0);
	int width = (int)cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_WIDTH);
	int height = (int)cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_HEIGHT);
	IplImage* img = 0;
	IplImage* gray = 0;
	IplImage* edge = 0;
	gray = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
	edge = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
	while(1)
	{
		img = cvQueryFrame(cap);
		if(img)
			cvCvtColor(img, gray, CV_BGR2GRAY);		 
		cvCanny(gray, edge, 30, 100, 3);				
		cvShowImage("show video edge",edge);	
		int c = cvWaitKey(10);
		if(c == 0x1b){
			break;
		}

	}
	cvReleaseImage(&gray);
	cvReleaseImage(&img);
	cvReleaseCapture(&cap);
	cvDestroyWindow("show video edge");

	return 0;
} 



// ROI拷贝

#include "../inc/opencv/cv.h"
#include "../inc/opencv/cvaux.h"
#include "../inc/opencv/cxcore.h"
#include "../inc/opencv/highgui.h"
using namespace cv;

#pragma comment(lib, "../../lib/cv200.lib")
#pragma comment(lib, "../../lib/cxcore200.lib")
#pragma comment(lib, "../../lib/highgui200.lib")


int main()
{
	IplImage* pImg = cvLoadImage("./ts.jpg", 1);

	CvRect rect;
	rect.x = 15;
	rect.y = 30;
	rect.width = 300;
	rect.height = 300;

	CvMat* mat = cvCreateMat(300,300, CV_MAKETYPE(8, pImg->nChannels));

	cvGetSubRect(pImg,mat, rect);
	cvNamedWindow("sub");
	cvShowImage("mat", mat);

	cvReleaseImage(&pImg);
	cvReleaseMat(&mat);
	cvDestroyWindow("sub");

	return 0;
}



// sobel边缘检测
#include "../inc/opencv/cv.h"
#include "../inc/opencv/cvaux.h"
#include "../inc/opencv/cxcore.h"
#include "../inc/opencv/highgui.h"
using namespace cv;

#pragma comment(lib, "../../lib/cv200.lib")
#pragma comment(lib, "../../lib/cxcore200.lib")
#pragma comment(lib, "../../lib/highgui200.lib")


#include <iostream>
#include <string.h>
using namespace std;
// sobel
//*
int main(int argc, char** argv)
{
	if(argc < 2)
		return -1;

	IplImage* ori = 0;
	IplImage* res = 0;
	IplImage* sm = 0;

	ori = cvLoadImage(argv[1],CV_LOAD_IMAGE_GRAYSCALE);	

	int width = ori->width;
	int height = ori->height;

	sm = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
	cvSmooth(ori, sm, CV_BLUR, 3, 3, 0);

	res = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
	IplImage* showres = cvCreateImage(cvSize(width,height),IPL_DEPTH_16S,1);

	//cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size CV_DEFAULT(3));
	// xorder yorder 分别表示 X Y 方向上的差分阶数
	// 通常情况下 [xorder yorder aperture_size] = [1 0 3]  or [0 1 3]

	cvSobel(sm, showres,2,0, 3);

	// show laplace result
	cvNamedWindow("Sobel",1);
	cvConvertScaleAbs(showres , res);
	cvShowImage("Sobel",res);	

	cvWaitKey(0);

	cvReleaseImage(&sm);
	cvReleaseImage(&ori);
	cvReleaseImage(&showres);	
	cvReleaseImage(&res);	
	cvDestroyWindow("Sobel");
	return 0;
}


// LapLas变换

#include "../inc/opencv/cv.h"
#include "../inc/opencv/cvaux.h"
#include "../inc/opencv/cxcore.h"
#include "../inc/opencv/highgui.h"
using namespace cv;

#pragma comment(lib, "../../lib/cv200.lib")
#pragma comment(lib, "../../lib/cxcore200.lib")
#pragma comment(lib, "../../lib/highgui200.lib")


#include <iostream>
#include <string.h>
using namespace std;

// laplace 变换
//*
int main(int argc, char** argv)
{
if(argc < 2)
return -1;

IplImage* ori = 0;
IplImage* res = 0;
IplImage* sm = 0;

ori = cvLoadImage(argv[1],CV_LOAD_IMAGE_GRAYSCALE);	

int width = ori->width;
int height = ori->height;

sm = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
cvSmooth(ori, sm, CV_BLUR, 3, 3, 0);

res = cvCreateImage(cvSize(width,height),IPL_DEPTH_16S,1);
IplImage* showres = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
cvLaplace(sm, res, 3);

// show laplace result
cvNamedWindow("laplace",1);
cvConvertScaleAbs(res , showres);
cvShowImage("laplace",showres);	

cvWaitKey(0);

cvReleaseImage(&sm);
cvReleaseImage(&ori);
cvReleaseImage(&showres);	
cvReleaseImage(&res);	
cvDestroyWindow("laplace");
return 0;
}

// 角点检测

const int max_corners = 100;
int main(int argc, char** argv)
{

	//*
	if(argc < 2)
		return -1;

	int cornerCnt = max_corners;
	CvPoint2D32f corners[max_corners];
	IplImage* srcImg = 0;
	IplImage* grayImg = 0;
	IplImage* cornersA = 0;
	IplImage* cornersB = 0;

	srcImg = cvLoadImage(argv[1],1);//
	if(!srcImg)
		return -1;

	int m = srcImg->width;
	int h = srcImg->height;

	grayImg = cvCreateImage(cvSize(m, h),IPL_DEPTH_8U,1);
	cvCvtColor(srcImg,grayImg,CV_BGR2GRAY);

	cornersA = cvCreateImage(cvGetSize(srcImg),IPL_DEPTH_32F,1);
	cornersB = cvCreateImage(cvGetSize(srcImg),IPL_DEPTH_32F,1);

	cvGoodFeaturesToTrack(grayImg,cornersA,cornersB,corners,&cornerCnt, 0.05, 5, 0, 3, 0, 0.4);

	CvScalar color = CV_RGB(255,0,0);
	if(cornerCnt > 0){
		for(int i = 0; i < cornerCnt; ++i){
			cvCircle(srcImg, cvPoint((int)(corners[i].x), (int)(corners[i].y)), 2, color, 2, CV_AA, 0);
		}
	}

	cvNamedWindow("corners", 1);
	cvShowImage("corners", srcImg);


	cvReleaseImage(&srcImg);
	cvReleaseImage(&grayImg);
	cvReleaseImage(&cornersA);
	cvReleaseImage(&cornersB);
	cvWaitKey(0);
	cvDestroyWindow("corners");

	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值