You've already forked libopenshot
mirror of
https://github.com/OpenShot/libopenshot.git
synced 2026-03-02 08:53:52 -08:00
Added zoom to Stabilizer Effect
This commit is contained in:
@@ -90,6 +90,7 @@ namespace openshot
|
||||
/// Init effect settings
|
||||
void init_effect_details();
|
||||
std::string protobuf_data_path;
|
||||
Keyframe zoom;
|
||||
|
||||
public:
|
||||
std::string teste;
|
||||
|
||||
@@ -51,7 +51,7 @@ void CVStabilization::stabilizeClip(openshot::Clip& video, size_t _start, size_t
|
||||
}
|
||||
|
||||
// Extract and track opticalflow features for each frame
|
||||
for (frame_number = start; frame_number < end; frame_number++)
|
||||
for (frame_number = start; frame_number <= end; frame_number++)
|
||||
{
|
||||
// Stop the feature tracker process
|
||||
if(processingController->ShouldStop()){
|
||||
@@ -67,7 +67,7 @@ void CVStabilization::stabilizeClip(openshot::Clip& video, size_t _start, size_t
|
||||
TrackFrameFeatures(cvimage, frame_number);
|
||||
|
||||
// Update progress
|
||||
processingController->SetProgress(uint(100*frame_number/end));
|
||||
processingController->SetProgress(uint(100*(frame_number-start)/(end-start)));
|
||||
}
|
||||
|
||||
// Calculate trajectory data
|
||||
|
||||
@@ -77,7 +77,7 @@ void CVTracker::trackClip(openshot::Clip& video, size_t _start, size_t _end, boo
|
||||
}
|
||||
|
||||
// Loop through video
|
||||
for (frame = start; frame < end; frame++)
|
||||
for (frame = start; frame <= end; frame++)
|
||||
{
|
||||
|
||||
// Stop the feature tracker process
|
||||
@@ -110,7 +110,7 @@ void CVTracker::trackClip(openshot::Clip& video, size_t _start, size_t _end, boo
|
||||
|
||||
}
|
||||
// Update progress
|
||||
processingController->SetProgress(uint(100*frame_number/end));
|
||||
processingController->SetProgress(uint(100*(frame_number-start)/(end-start)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ void Stabilizer::init_effect_details()
|
||||
info.has_audio = false;
|
||||
info.has_video = true;
|
||||
protobuf_data_path = "";
|
||||
|
||||
zoom = 1.0;
|
||||
}
|
||||
|
||||
// This method is required for all derived classes of EffectBase, and returns a
|
||||
@@ -79,6 +79,8 @@ std::shared_ptr<Frame> Stabilizer::GetFrame(std::shared_ptr<Frame> frame, int64_
|
||||
|
||||
// Check if track data exists for the requested frame
|
||||
if(transformationData.find(frame_number) != transformationData.end()){
|
||||
|
||||
float zoom_value = zoom.GetValue(frame_number);
|
||||
|
||||
// Create empty rotation matrix
|
||||
cv::Mat T(2,3,CV_64F);
|
||||
@@ -97,7 +99,7 @@ std::shared_ptr<Frame> Stabilizer::GetFrame(std::shared_ptr<Frame> frame, int64_
|
||||
cv::warpAffine(frame_image, frame_stabilized, T, frame_image.size());
|
||||
|
||||
// Scale up the image to remove black borders
|
||||
cv::Mat T_scale = cv::getRotationMatrix2D(cv::Point2f(frame_stabilized.cols/2, frame_stabilized.rows/2), 0, 1.04);
|
||||
cv::Mat T_scale = cv::getRotationMatrix2D(cv::Point2f(frame_stabilized.cols/2, frame_stabilized.rows/2), 0, zoom_value);
|
||||
cv::warpAffine(frame_stabilized, frame_stabilized, T_scale, frame_stabilized.size());
|
||||
frame_image = frame_stabilized;
|
||||
}
|
||||
@@ -178,6 +180,7 @@ Json::Value Stabilizer::JsonValue() const {
|
||||
Json::Value root = EffectBase::JsonValue(); // get parent properties
|
||||
root["type"] = info.class_name;
|
||||
root["protobuf_data_path"] = protobuf_data_path;
|
||||
root["zoom"] = zoom.JsonValue();
|
||||
|
||||
// return JsonValue
|
||||
return root;
|
||||
@@ -215,6 +218,8 @@ void Stabilizer::SetJsonValue(const Json::Value root) {
|
||||
protobuf_data_path = "";
|
||||
}
|
||||
}
|
||||
if(!root["zoom"].isNull())
|
||||
zoom.SetJsonValue(root["zoom"]);
|
||||
}
|
||||
|
||||
// Get all properties for a specific frame
|
||||
@@ -229,6 +234,8 @@ std::string Stabilizer::PropertiesJSON(int64_t requested_frame) const {
|
||||
root["end"] = add_property_json("End", End(), "float", "", NULL, 0, 1000 * 60 * 30, false, requested_frame);
|
||||
root["duration"] = add_property_json("Duration", Duration(), "float", "", NULL, 0, 1000 * 60 * 30, true, requested_frame);
|
||||
|
||||
root["zoom"] = add_property_json("Zoom", zoom.GetValue(requested_frame), "float", "", &zoom, 0.0, 2.0, false, requested_frame);
|
||||
|
||||
// Return formatted string
|
||||
return root.toStyledString();
|
||||
}
|
||||
|
||||
@@ -71,6 +71,16 @@ void displayClip(openshot::Clip &r9){
|
||||
cv::destroyAllWindows();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
|
||||
The following methods are just for getting JSON info to the pre-processing effects
|
||||
|
||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
*/
|
||||
|
||||
|
||||
// Return JSON string for the tracker effect
|
||||
string trackerJson(cv::Rect2d r, bool onlyProtoPath){
|
||||
// Set the tracker
|
||||
@@ -108,6 +118,16 @@ string stabilizerJson(bool onlyProtoPath){
|
||||
return "{" + protobuf_data_path + ", " + smoothing_window.str() + "}";
|
||||
}
|
||||
|
||||
string objectDetectionJson(bool onlyProtoPath){
|
||||
|
||||
// Construct all the composition of the JSON string
|
||||
string protobuf_data_path = "\"protobuf_data_path\": \"example_object_detection.data\"";
|
||||
|
||||
// Return only the the protobuf path in JSON format
|
||||
if(onlyProtoPath)
|
||||
return "{" + protobuf_data_path + "}";
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
|
||||
// Set pre-processing effects
|
||||
|
||||
@@ -55,10 +55,10 @@ SUITE(CVStabilizer_Tests)
|
||||
c1.Open();
|
||||
|
||||
// Create stabilizer
|
||||
CVStabilization stabilizer("{\"protobuf_data_path\": \"stabilizer.data\"}", processingController);
|
||||
CVStabilization stabilizer("{\"protobuf_data_path\": \"stabilizer.data\", \"smoothing_window\": 30}", processingController);
|
||||
|
||||
// Stabilize clip for frames 0-20
|
||||
stabilizer.stabilizeClip(c1, 0, 20+1, true);
|
||||
// Stabilize clip for frames 0-21
|
||||
stabilizer.stabilizeClip(c1, 0, 21, true);
|
||||
|
||||
// Get stabilized data
|
||||
TransformParam tp = stabilizer.GetTransformParamData(20);
|
||||
@@ -93,7 +93,7 @@ SUITE(CVStabilizer_Tests)
|
||||
c1.Open();
|
||||
|
||||
// Create first stabilizer
|
||||
CVStabilization stabilizer_1("{\"protobuf_data_path\": \"stabilizer.data\"}", processingController);
|
||||
CVStabilization stabilizer_1("{\"protobuf_data_path\": \"stabilizer.data\", \"smoothing_window\": 30}", processingController);
|
||||
|
||||
// Stabilize clip for frames 0-20
|
||||
stabilizer_1.stabilizeClip(c1, 0, 20+1, true);
|
||||
@@ -106,7 +106,7 @@ SUITE(CVStabilizer_Tests)
|
||||
stabilizer_1.SaveStabilizedData();
|
||||
|
||||
// Create second stabilizer
|
||||
CVStabilization stabilizer_2("{\"protobuf_data_path\": \"stabilizer.data\"}", processingController);
|
||||
CVStabilization stabilizer_2("{\"protobuf_data_path\": \"stabilizer.data\", \"smoothing_window\": 30}", processingController);
|
||||
|
||||
// Load stabilized data from first stabilizer protobuf data
|
||||
stabilizer_2.LoadStabilizedData();
|
||||
|
||||
Reference in New Issue
Block a user