change position of image overlay on the fly - linux

I need some help on an issue that I am having overlaying images on a live feed.
Currently, I am streaming raw data from a device, transcoding that data (i.e. ogg) and then re-streaming using HTTP because I need to view through an HTML page. My problem is that I need to overlay an image on the stream where - when a particular object moves - the image overlay moves as well.
For example, if you wanted to place an 'X' over a moving object where that object may move left-to-right or top-to-bottom. At this point, I am able to overlay the image at a fixed point using the following command:
ffmpeg -i rtsp://[host]:[port] -i x.png -filter_complex 'overlay=10:main_h-overlay_h-10' http://[host]:[post]/output.ogg
This will give me an 'X' over the object at the start but, once the object moves I need to change the position of that 'X'.
The only real requirement is that the technologies that I utilize need to be available for Linux.
Any ideas ?
Thanks !

Related

Calculate a camera's target point via expression or scripting in Adobe After Effect?

I am working on a project about exporting Adobe After Effect animation data to threejs.
When I try to get camera parameters, I can get the coordinate of the 'target point' from the camera directly, but if I rotate the camera, the 'target point' keep moving but the parameters not change.
How to get the real position of a camera's target point via expression or scripting?
If there are no direct way to access the data, How to calculate it with the rotation parameters?
sorry I cannot post image directly now, you can take a look at
this link

How to force to show image orientation?

I'm using multer node and express to upload a image to my app. But some images shows rotate 90 degrees when it's on the client.
why is this happening?, how can I fix it?
By the way I'm using vue on the client and for the upload process, of course I use formdata
UPDATE
After research and comments from the guys above, its a EXIF problem. Any code ideas to solve this?
The behaviour you are experiencing is probably caused by the Exif Orientation metadata.
There is another question here on Stackoverflow about this problem: JS Client-Side Exif Orientation: Rotate and Mirror JPEG Images
The selected answer points to a project called Javascript-Load-Image as a possible solution, that basically means you will have to take the orientation in consideration when rendering the images to get a consistent behaviour.
Another possible alternative would be to edit/remove the orientation metadata in your backend.
Check the following resource for more information:
JPEG Image Orientation and Exif
This is most likely caused by Exif metadata (just like #Romulo suggested).
Browsers ignore Exif metadata when displaying images and that's why you're getting this behaviour.
To check that this is related to Exif take 4 pictures with different phone orientation (landscape left, landscape right, portrait, upside down). One of them will be shown properly, while the other 3 will be rotated. (Also note that if you're using the front camera, the image will also get mirrored).
Not all camera phones do this, but iOS does it consistently. The reason for this is performance. When rotation the phone the sensor also rotates and the picture taken doesn't take the rotation into consideration.
To properly show the photo, the image needs to be rotated, but if you just change the Exif metadata then you don't need to do it. Of course, any client that shows the image needs to be aware of this information (and iOS Photos and such are aware).
This has nothing to do with multer, but with the images are stored.
The bottom line is that you need to rotate the image to compensate for this.
Take a look over this npm package to adjust your image on the server side.

Mapbox GL JS : Do large images overlay accurately - if so, how?

I feel like I have been stuck perpetually with this problem. I have a single geoTIF file of weather radar data that will not overlay on Mapbox correctly. The spatial area is of the entire US. It should be a simple task, but there seems to be some sort of weird distortion causing the overlay to not be correct, even though I am very certain my Mapbox coordinates in the linked HTML file below are correct and match the geoTIF.
I uploaded the geoTIF to a website called "geotiff.io" (which uses leaflet to show the files) and it renders the image perfectly, but I cannot emulate it using Mapbox. The storms always are off in Mapbox.
This is a link to my Mapbox map with the image overlay where it is incorrect
This is a dropbox link to a zip file with the geoTIF and colorization file, which I used gdaldem with
I would like to explain more, so it's simplified. Here is an image showing part of a storm that is out of place (left side) and how it is too far north. On the right side was a screenshot taken from geotiff.io - and how it's perfect. What is going on here?!
The geoTIF image was not set as a web mercator projection before being displayed in Mapbox. I assume the geotiff.io service corrected this automatically and made me think there was an issue with the code or Mapbox, when it was not.

Object Detection by giving an input image using opencv

I'm new to opencv .My requirement is that in a video by giving an input image it should tag every occurence of the image in the video using opencv. Any help would be much appreciated.
You can try with OpenCV Template Matching
where you have to extract each frame your video and apply Template Matching.
You can see OpenCV video tutorial here. Also see OpenCV documentation Reading and Writing Images and Video.
Load the input image in a global cv:Mat.
Scale this image appropriately, make this the template image(or Mat).
First load the video, then extract each frame out of it and store in a local cv::Mat.
Run template matching as suggested in the tutorial given by Harris with the local frame.
If match found, mark the frame and position using some GUI or color whatever.
Repeat process for next frame.

How can I capture an Image for post processing in OSG

I need to capture an Image from my viewer and need to do some post processing and display it back on it.
Right now am more interested in the first part of it. That is to capture Image from the viewer.
While going through the OSG I came across ScreenCaptureHandler.
But am not able to get an Image out of it.
I am still working to get it done but in case any of you have any other way of how it can be done or an Example for screencapturehandler that you can share.
To capture the rendered view into an image I use a custom osg::Camera::DrawCallback.
To capture the view at any point, set the drawCallback on the camera, force rendering, restore to a NULL callback.
Notice that the following code is part of a member function of a custom viewer (that's probably not your case):
osgViewer::View::getCamera()->setFinalDrawCallback(new ViewCaptureCallback(img));
osgViewer::Viewer::renderingTraversals();
osgViewer::View::getCamera()->setFinalDrawCallback(NULL);
The ViewCaptureCallback basically uses image->readPixels() to read from the backbuffer.
glReadBuffer( GL_BACK );
osg::GraphicsContext* gc = renderInfo.getState()->getGraphicsContext();
// Here you should process the backbuffer's size and format
image->readPixels(0, 0, gc->getTraits()->width, gc->getTraits()->height, pixelFormat, GL_UNSIGNED_BYTE);
Hope it helps

Resources