Initial commit: SmartCar Framework v0.1 — 龙芯2K0300智能车开发框架\n\n- HAL: GPIO/PWM/Encoder/Framebuffer 驱动\n- Control: PID/IMU/Motor/Servo 控制\n- Vision: HSV双Otsu→4点标定IPM→洪泛填充→逐行搜线\n- Strategy: 三区前瞻偏差+速度策略\n- Debug: 文件热调参+LCD预览+cv截帧\n- Scheduler: 5ms timerfd+epoll 中央调度器
This commit is contained in:
56
vision/camera.cpp
Normal file
56
vision/camera.cpp
Normal file
@@ -0,0 +1,56 @@
|
||||
#include "camera.hpp"
|
||||
#include <atomic>
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
|
||||
static cv::VideoCapture* cap = nullptr;
|
||||
static cv::Mat pubframe;
|
||||
static std::mutex frame_mutex;
|
||||
static std::atomic<bool> stream_running{false};
|
||||
|
||||
bool camera_init()
|
||||
{
|
||||
cap = new cv::VideoCapture(0);
|
||||
if (!cap->isOpened()) return false;
|
||||
|
||||
cap->set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));
|
||||
cap->set(cv::CAP_PROP_FRAME_WIDTH, CAMERA_WIDTH);
|
||||
cap->set(cv::CAP_PROP_FRAME_HEIGHT, CAMERA_HEIGHT);
|
||||
cap->set(cv::CAP_PROP_AUTO_EXPOSURE, -1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void camera_deinit()
|
||||
{
|
||||
if (cap) { cap->release(); delete cap; cap = nullptr; }
|
||||
}
|
||||
|
||||
cv::Mat camera_capture()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(frame_mutex);
|
||||
return pubframe.clone();
|
||||
}
|
||||
|
||||
cv::Mat camera_resize(const cv::Mat& src)
|
||||
{
|
||||
cv::Mat resized;
|
||||
cv::resize(src, resized, cv::Size(IMAGE_WIDTH, IMAGE_HEIGHT));
|
||||
return resized;
|
||||
}
|
||||
|
||||
void camera_stream_start()
|
||||
{
|
||||
stream_running.store(true);
|
||||
std::thread([]() {
|
||||
cv::Mat tmp;
|
||||
while (stream_running.load())
|
||||
{
|
||||
if (cap && cap->read(tmp))
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(frame_mutex);
|
||||
pubframe = tmp.clone();
|
||||
}
|
||||
}
|
||||
}).detach();
|
||||
}
|
||||
Reference in New Issue
Block a user