Mat img;
int color[111111];
int main()
{
VideoCapture video(0);
if (!video.isOpened())
{
return -1;
}
Mat img;
Mat img1, img2, img3;
Mat grayimg1, grayimg2, grayimg3;
Mat binaryimg;
video >> img;
cvtColor(img, grayimg1, CV_BGR2GRAY);
while (1)
{
video >> img;
cvtColor(img, grayimg2, CV_BGR2GRAY);
absdiff(grayimg2, grayimg1, grayimg3);
medianBlur(binaryimg, binaryimg, 3);
threshold(grayimg3, binaryimg, 40, 250, CV_THRESH_BINARY_INV);
imshow("gray", grayimg3);
imshow("binary", binaryimg);
//----------------------------------------------
int nRow = binaryimg.rows;
int nCol = binaryimg.cols;
//imshow("img", binaryimg);
memset(color, 0, sizeof(color));
for (int i = 0; i < nRow; i++)
{
uchar *data = binaryimg.ptr<uchar>(i);
for (int j = 0; j < nCol; j++)
{
if (*data == 0)
color[j]++;
*data++;
}
}
int high = 450;
Mat histimg(high, nCol, CV_8UC3);
for (int j = 0; j < nCol; j += 2)
{
if (color[j] < 260)
color[j] = 0;
//else
//color[j] = 400;
line(histimg, Point(j, high - color[j]), Point(j, high), Scalar(0, 0, 250), 3);
}
for (int j = 0; j<nCol; j++)
{
}
imshow("Hist", histimg);
//--------------------------------------------------------
if(waitKey(40) > 0)
{
break;
}
}
waitKey(100);
return 0;
}