// 显示视频中的轮廓信息
#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;
}