我正在研究一个使用相机拍照以检测停车场内可用停车位的项目。
我将使用图像减法来比较停车场的空旷和被占用情况。
这是用于比较的两张图片
这是结果图像:
任何人都可以告诉我如何
识别并在车外放置一个矩形
为我的进一步使用输出汽车的数量?
以下是代码:
// Test.cpp
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
Mat bg_frame;
Mat cam_frame;
Mat diff_frame;
char charCheckForEscKey = 0;
int main() {
while (charCheckForEscKey != 27 /*&& capWebcam.isOpened()*/) {
bg_frame = imread("Picture1.jpg",0);
cam_frame = imread("Picture4.jpg",0);
resize(cam_frame, cam_frame, bg_frame.size());
imshow("test1", bg_frame);
imshow("test2", cam_frame);
absdiff(bg_frame, cam_frame, diff_frame);
threshold(diff_frame, diff_frame, 80, 255, THRESH_BINARY);
//erode(diff_frame, diff_frame, getStructuringElement(MORPH_RECT, Size(1, 1)));
dilate(diff_frame, diff_frame, Mat(), Point(-1, -1));
//Canny(diff_frame, diff_frame, 30, 70);
imshow("test3", diff_frame);
charCheckForEscKey = cv::waitKey(1); // delay (in ms) and get key press, if any
}
return(0);
}
答案 0 :(得分:1)
你的问题在一篇文章中解决起来非常复杂,但我会就如何解决它给你一些指示。
这个想法是正确的,你应该比较图像之间的差异。我不建议逐个像素地直接比较,但它是原型的快速解决方案。对于更强大的方法,请结帐background subtraction c++和more extense but in python
至于计算车辆数量,考虑到场景的复杂性(重叠车辆,非均匀停车),我建议手动指定每辆车的感兴趣区域(ROI)。应用您已经拥有的每个ROI的方法,您可以检测该停车位是否被占用。
关于如何在opencv中draw a rectangle。
void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0);