Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <iostream>
- #include <fstream>
- #include "cv.h"
- #include "highgui.h"
- using namespace std;
- char imagename1[100] = "red1.jpg";
- char imagename2[100] = "red2.jpg";
- void diffImage(IplImage* img1, IplImage* gimg1, IplImage* img2, IplImage* gimg2, IplImage* res) {
- // saving 1st channel
- cvSetImageCOI(img1, 3);
- cvCopy(img1, gimg1);
- cvSmooth(gimg1, gimg1, CV_BLUR, 5, 5);
- cvResetImageROI(img1);
- // saving 1st channel
- cvSetImageCOI(img2, 3);
- cvCopy(img2, gimg2);
- cvSmooth(gimg2, gimg2, CV_BLUR, 5, 5);
- cvResetImageROI(img2);
- // comparison
- cvAbsDiff(gimg1, gimg2, res);
- cvCmpS(res, 20, res, CV_CMP_GE);
- }
- void calculateMovementCoordinates(
- IplImage* diff_img,
- CvPoint& upperLeft,
- CvPoint& lowerRight) {
- upperLeft = cvPoint(-1,-1);
- lowerRight = cvPoint(-1,-1);
- //int minFound = 0;
- for(int row = 0; row < diff_img->height; ++row) {
- const uchar *ptr = (const uchar*)(diff_img->imageData + row * diff_img->widthStep);
- for(int col = 0; col < diff_img->width; ++col ) {
- if( *ptr++ ) {
- if( upperLeft.y == -1 ) {
- upperLeft.y = row;
- } else {
- lowerRight.y = row;
- }
- if( upperLeft.x == -1 || upperLeft.x > col ) {
- upperLeft.x = col;
- } else if( lowerRight.x < col ) {
- lowerRight.x = col;
- }
- }
- }
- }
- //cvMinMaxLoc(diff_img,&min,&max,&minloc,&maxloc);
- }
- int main(int argc, char** argv) {
- IplImage* old_img;
- IplImage* gimg1;
- IplImage* new_img = 0;
- IplImage* gimg2;
- IplImage* diff_img;
- IplImage* display_img;
- CvCapture* g_capture = NULL;
- CvPoint upperLeft, lowerRight;
- cvInitSystem(argc, argv);
- // photo
- //IplImage* tmpimg1 = cvLoadImage(imagename1);
- //IplImage* tmpimg2 = cvLoadImage(imagename2);
- //new_img = tmpimg1;
- char *libraries;
- char *modules;
- cvGetModuleInfo(0, (const char**) & libraries, (const char**) & modules);
- printf("libraries: %s\n, modules: %s\n", libraries, modules);
- // webcam
- g_capture = cvCreateFileCapture("panda.mp4");
- //g_capture = cvCreateCameraCapture(0);
- new_img = cvQueryFrame(g_capture);
- CvSize size = cvGetSize(new_img);
- old_img = cvCreateImage(size, IPL_DEPTH_8U, 3);
- gimg1 = cvCreateImage(size, IPL_DEPTH_8U, 1);
- gimg2 = cvCreateImage(size, IPL_DEPTH_8U, 1);
- diff_img = cvCreateImage(size, IPL_DEPTH_8U, 1);
- display_img = cvCreateImage(cvSize(2*size.width,size.height), IPL_DEPTH_8U, 3);
- IplImage *left_img = cvCreateImageHeader(size,display_img->depth,display_img->nChannels);
- left_img->origin = display_img->origin;
- left_img->widthStep = display_img->widthStep;
- left_img->imageData = display_img->imageData;
- IplImage *right_img = cvCreateImageHeader(size,display_img->depth,display_img->nChannels);
- right_img->origin = display_img->origin;
- right_img->widthStep = display_img->widthStep;
- right_img->imageData = display_img->imageData + right_img->width*right_img->nChannels;
- cvNamedWindow("Surveillance", CV_WINDOW_AUTOSIZE);
- int i = 0;
- while (1) {
- ++i;
- //new_img = i % 2 ? tmpimg1 : tmpimg2;
- new_img = cvQueryFrame(g_capture);
- if (new_img) {
- diffImage(old_img, gimg1, new_img, gimg2, diff_img);
- cvCopy(new_img, old_img);
- cvSetImageCOI(left_img,1);
- cvCopy(diff_img,left_img);
- cvSetImageCOI(left_img,2);
- cvCopy(diff_img,left_img);
- cvSetImageCOI(left_img,3);
- cvCopy(diff_img,left_img);
- cvResetImageROI(left_img);
- calculateMovementCoordinates(diff_img, upperLeft,lowerRight);
- cvRectangle(new_img,upperLeft,lowerRight,cvScalar(0,0,255),6);
- cvCopy(new_img,right_img);
- cvShowImage("Surveillance", display_img);
- }
- char c = (char) cvWaitKey(10);
- if (c == 27) break;
- }
- cvReleaseImageHeader(&left_img);
- cvReleaseImageHeader(&right_img);
- cvReleaseImage(&display_img);
- cvReleaseImage(&old_img);
- cvReleaseImage(&gimg1);
- cvReleaseImage(&gimg2);
- cvReleaseImage(&diff_img);
- cvDestroyWindow("Surveillance");
- return (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement