You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
73 lines
1.8 KiB
#include <opencv2/v4d/v4d.hpp> |
|
#ifndef __EMSCRIPTEN__ |
|
# include <opencv2/imgcodecs.hpp> |
|
#endif |
|
|
|
int main() { |
|
using namespace cv; |
|
using namespace cv::viz; |
|
|
|
string hr = "Hello Rainbow!"; |
|
Ptr<V4D> v4d = V4D::make(Size(1280, 720), "Custom Source/Sink"); |
|
v4d->setVisible(true); |
|
//Make a Source that generates rainbow frames. |
|
Source src([=](cv::UMat& frame){ |
|
static long cnt = 0; |
|
|
|
if(frame.empty()) |
|
frame.create(v4d->getFrameBufferSize(), CV_8UC3); |
|
frame = colorConvert(Scalar(cnt % 180, 128, 128, 255), COLOR_HLS2BGR); |
|
|
|
++cnt; |
|
if(cnt > std::numeric_limits<long>().max() / 2.0) |
|
cnt = 0; |
|
return true; |
|
}, 60.0f); |
|
|
|
//Make a Sink the saves each frame to a PNG file. |
|
Sink sink([](const cv::UMat& frame){ |
|
static long cnt = 0; |
|
|
|
try { |
|
#ifndef __EMSCRIPTEN__ |
|
imwrite(std::to_string(cnt) + ".png", frame); |
|
#else |
|
CV_UNUSED(frame); |
|
#endif |
|
} catch(std::exception& ex) { |
|
cerr << "Unable to write frame: " << ex.what() << endl; |
|
return false; |
|
} |
|
|
|
++cnt; |
|
if(cnt > std::numeric_limits<long>().max() / 2.0) { |
|
cnt = 0; |
|
} |
|
|
|
return true; |
|
}); |
|
|
|
//Attach source and sink |
|
v4d->setSource(src); |
|
v4d->setSink(sink); |
|
|
|
v4d->run([=]() { |
|
//Capture video from the Source |
|
if(!v4d->capture()) |
|
return false; //end of input video |
|
|
|
//Render "Hello Rainbow!" over the frame |
|
v4d->nvg([=](const Size& sz) { |
|
using namespace cv::viz::nvg; |
|
|
|
fontSize(40.0f); |
|
fontFace("sans-bold"); |
|
fillColor(Scalar(255, 0, 0, 255)); |
|
textAlign(NVG_ALIGN_CENTER | NVG_ALIGN_TOP); |
|
text(sz.width / 2.0, sz.height / 2.0, hr.c_str(), hr.c_str() + hr.size()); |
|
}); |
|
v4d->write(); //Write video to the Sink |
|
return v4d->display(); //Display the framebuffer in the native window |
|
}); |
|
} |
|
|
|
|