项目程序
color.cpp : 定义控制台应用程序的入口点。 // // vs_usb9.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "opencv2/opencv.hpp" #include#include #include #include #include #include #include #include #include // for fileoutput #include #include #pragma comment(lib,"ws2_32.lib") const int MAX_BUF_LEN = 255; using namespace cv; using namespace std; //int bSums(Mat src) //{ // // int counter = 0; // //迭代器访问像素点 // Mat_ ::iterator it = src.begin (); // Mat_ ::iterator itend = src.end (); // for (; it != itend; ++it) // { // if ((*it) > 0) counter += 1;//二值化后,像素点是0或者255 // } // return counter; //} //子函数声明 void initialization(); void MoveDetect(Mat temp, Mat frame); //多线程声明 DWORD WINAPI ThreadProc2(LPVOID lpParameter); #define MAX_LINE 1024 //定义txt中最大行数。可调整更改 int col_thread; int con_thread; char recvBuff[1024]; char buff[MAX_BUF_LEN]="9"; Mat frame, frame1, temp,diff,imgThresholded,hsv; //定义矩阵 int main(int argc, char** argv) { double v1,v2; ifstream infile; infile.open("D:\9_12image\9_12thread\thread.txt"); if(!infile) cout<<"error"< >t1) { *p=t1; p++; } infile.close(); col_thread=a[0][0]; con_thread=a[0][1]; VideoCapture video0; video0.open(0); //读入视频 video0.set(CV_CAP_PROP_frame_WIDTH,1600); video0.set(CV_CAP_PROP_frame_HEIGHT,1200); if (!video0.isOpened()) // 如果读入失败则结束 { cout << "Cannot open the web cam" << endl; return -1; } int i = 0; while (1) { video0 >> frame;//读帧进frame imshow("frame9", frame); waitKey(30); if (i == 0)//如果为第一帧(temp还为空) { MoveDetect(frame, frame);//子函数MoveDetect()进行运动物体检测,返回值存入result i++; } else//若不是第一帧(temp有值了) { MoveDetect(temp, frame);//子函数MoveDetect()进行运动物体检测,返回值存入result } temp = frame.clone(); memset(recvBuff,0,sizeof(recvBuff)); } return 0; } void MoveDetect(Mat temp, Mat frame) { int a=0; int b=0; frame1 = frame.clone(); absdiff(temp, frame, diff); cvtColor(diff, hsv, CV_BGR2HSV); int counter; inRange(diff, Scalar(70, 70, 70), Scalar(180, 180, 180), imgThresholded); //int counter = bSums(imgThresholded);//调用函数bSums //counter=sum(sum(imgThresholded)); //cout << "A:" << counter; //if (counter>=80) counter = countNonZero(imgThresholded); if (counter >= 80) { a=1; b=1; } if(b==1) //发送 {CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL); b=0; GetExitCodeThread(ThreadProc2, 0); // CloseHandle(ThreadProc2); } if((a==1)||(atoi(recvBuff))) //发送与保存多线程 { ofstream outfile; outfile.open("D://9_12image//9_12position//9_position", ofstream::app); a=0; SYSTEMTIME sys; GetLocalTime(&sys); char tmp[100]; // outfile << "position:" << "x="<


