我正在使用相机拍摄照片以检测 parking 场中的可用 parking 位的项目。
我将使用图像减法来比较 parking 场的空置情况和占用情况。
这是两个图片供比较
这是结果图像:
谁能告诉我如何
这是代码:
// 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);
}
最佳答案
您的问题非常复杂,需要在单个帖子中解决,但我将为您提供一些解决方法的指导。
这个想法是正确的,您应该比较图像之间的差异。我不建议直接逐像素比较,但是它是原型(prototype)的快速解决方案。有关更健壮的方法,请检查background subtraction c++和more extense but in python
至于计算车辆数量,考虑到场景的复杂性(重叠的汽车,不均匀的 parking 位),我建议手动为每辆汽车指定一个关注区域(ROI)。应用已经为每个ROI确定的方法,您可以检测到该 parking 位是否被占用。
关于如何在opencv中draw a rectangle。
void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0);