You've already forked libopenshot
mirror of
https://github.com/OpenShot/libopenshot.git
synced 2026-03-02 08:53:52 -08:00
integrated Qimage to Mat conversion into Frame
This commit is contained in:
@@ -26,11 +26,18 @@
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with OpenShot Library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
*/
|
||||
|
||||
#ifndef OPENSHOT_FRAME_H
|
||||
#define OPENSHOT_FRAME_H
|
||||
|
||||
|
||||
#define int64 opencv_broken_int
|
||||
#define uint64 opencv_broken_uint
|
||||
#include <opencv2/imgproc/imgproc.hpp>
|
||||
#undef uint64
|
||||
#undef int64
|
||||
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#include <queue>
|
||||
@@ -107,6 +114,7 @@ namespace openshot
|
||||
{
|
||||
private:
|
||||
std::shared_ptr<QImage> image;
|
||||
cv::Mat imagecv;
|
||||
std::shared_ptr<QImage> wave_image;
|
||||
std::shared_ptr<juce::AudioSampleBuffer> audio;
|
||||
std::shared_ptr<QApplication> previewApp;
|
||||
@@ -157,7 +165,7 @@ namespace openshot
|
||||
|
||||
/// Add (or replace) pixel data to the frame
|
||||
void AddImage(int new_width, int new_height, int bytes_per_pixel, QImage::Format type, const unsigned char *pixels_);
|
||||
|
||||
|
||||
/// Add (or replace) pixel data to the frame
|
||||
void AddImage(std::shared_ptr<QImage> new_image);
|
||||
|
||||
@@ -226,6 +234,9 @@ namespace openshot
|
||||
/// Get pointer to Qt QImage image object
|
||||
std::shared_ptr<QImage> GetImage();
|
||||
|
||||
/// Get pointer to OpenCV Mat image object
|
||||
cv::Mat GetImageCV();
|
||||
|
||||
#ifdef USE_IMAGEMAGICK
|
||||
/// Get pointer to ImageMagick image object
|
||||
std::shared_ptr<Magick::Image> GetMagickImage();
|
||||
@@ -286,6 +297,9 @@ namespace openshot
|
||||
|
||||
/// Play audio samples for this frame
|
||||
void Play();
|
||||
|
||||
/// Convert Qimage to Mat
|
||||
cv::Mat Qimage2mat( std::shared_ptr<QImage>& qimage);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -925,6 +925,31 @@ std::shared_ptr<QImage> Frame::GetImage()
|
||||
return image;
|
||||
}
|
||||
|
||||
// Convert Qimage to Mat
|
||||
cv::Mat Frame::Qimage2mat( std::shared_ptr<QImage>& qimage) {
|
||||
|
||||
cv::Mat mat = cv::Mat(qimage->height(), qimage->width(), CV_8UC4, (uchar*)qimage->bits(), qimage->bytesPerLine());
|
||||
cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3 );
|
||||
int from_to[] = { 0,0, 1,1, 2,2 };
|
||||
cv::mixChannels( &mat, 1, &mat2, 1, from_to, 3 );
|
||||
return mat2;
|
||||
};
|
||||
|
||||
// Get pointer to OpenCV image object
|
||||
cv::Mat Frame::GetImageCV()
|
||||
{
|
||||
// Check for blank image
|
||||
if (!image)
|
||||
// Fill with black
|
||||
AddColor(width, height, color);
|
||||
|
||||
if (imagecv.empty())
|
||||
// Convert Qimage to Mat
|
||||
imagecv = Qimage2mat(image);
|
||||
|
||||
return imagecv;
|
||||
}
|
||||
|
||||
#ifdef USE_IMAGEMAGICK
|
||||
// Get pointer to ImageMagick image object
|
||||
std::shared_ptr<Magick::Image> Frame::GetMagickImage()
|
||||
|
||||
@@ -42,16 +42,6 @@ using namespace openshot;
|
||||
using namespace cv;
|
||||
|
||||
|
||||
cv::Mat qimage2mat( std::shared_ptr<QImage>& qimage) {
|
||||
|
||||
cv::Mat mat = cv::Mat(qimage->height(), qimage->width(), CV_8UC4, (uchar*)qimage->bits(), qimage->bytesPerLine());
|
||||
cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3 );
|
||||
int from_to[] = { 0,0, 1,1, 2,2 };
|
||||
cv::mixChannels( &mat, 1, &mat2, 1, from_to, 3 );
|
||||
return mat2.clone();
|
||||
};
|
||||
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
|
||||
openshot::Settings *s = openshot::Settings::Instance();
|
||||
@@ -95,17 +85,13 @@ int main(int argc, char* argv[]) {
|
||||
//int frame_number = (rand() % 750) + 1;
|
||||
int frame_number = frame;
|
||||
std::shared_ptr<openshot::Frame> f = r9.GetFrame(frame_number);
|
||||
|
||||
std::shared_ptr<QImage> qimage = f->GetImage();
|
||||
// qimage->convertToFormat(QImage::Format_RGB888);
|
||||
|
||||
// convert to opencv image
|
||||
cv::Mat cvimage = qimage2mat(qimage);
|
||||
cv::Mat cvimage = f->GetImageCV();
|
||||
cvtColor(cvimage, cvimage, CV_RGB2BGR);
|
||||
|
||||
|
||||
if(!trackerInit){
|
||||
// Rect2d bbox(287, 23, 86, 320);
|
||||
Rect2d bbox = selectROI("Display Image", cvimage);
|
||||
|
||||
kcfTracker.initTracker(bbox, cvimage);
|
||||
@@ -113,18 +99,9 @@ int main(int argc, char* argv[]) {
|
||||
}
|
||||
else{
|
||||
trackerInit = kcfTracker.trackFrame(cvimage);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// opencv code
|
||||
if ( !cvimage.data )
|
||||
{
|
||||
std::cout << "No image data \n";
|
||||
}
|
||||
|
||||
cv::imshow("Display Image", cvimage);
|
||||
|
||||
cv::waitKey(30);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user