now supports color key images with 255,0,255 as the color key (only pixels that are 255,0,255) are drawn

This commit is contained in:
lostjared
2018-04-08 11:11:38 -07:00
parent 853c43b722
commit e7697b8c90
5 changed files with 60 additions and 4 deletions

View File

@@ -294,6 +294,14 @@ void AC_MainWindow::createMenu() {
controls_setimage->setShortcut(tr("Ctrl+I"));
controls_menu->addAction(controls_setimage);
controls_setkey = new QAction(tr("Set Color Key Image"), this);
controls_setkey->setShortcut(tr("Ctrl+K"));
controls_menu->addAction(controls_setkey);
clear_images = new QAction(tr("Clear Images"), this);
clear_images->setShortcut(tr("Ctrl+K"));
controls_menu->addAction(clear_images);
controls_showvideo = new QAction(tr("Hide Display Video"), this);
controls_showvideo->setShortcut(tr("Ctrl+V"));
controls_menu->addAction(controls_showvideo);
@@ -306,8 +314,9 @@ void AC_MainWindow::createMenu() {
connect(controls_step, SIGNAL(triggered()), this, SLOT(controls_Step()));
connect(controls_stop, SIGNAL(triggered()), this, SLOT(controls_Stop()));
connect(controls_setimage, SIGNAL(triggered()), this, SLOT(controls_SetImage()));
connect(controls_setkey, SIGNAL(triggered()), this, SLOT(controls_SetKey()));
connect(controls_showvideo, SIGNAL(triggered()), this, SLOT(controls_ShowVideo()));
connect(clear_images, SIGNAL(triggered()), this, SLOT(controls_Clear()));
connect(combo_rgb, SIGNAL(currentIndexChanged(int)), this, SLOT(cb_SetIndex(int)));
controls_pause->setText(tr("Pause"));
help_about = new QAction(tr("About"), this);
@@ -684,6 +693,10 @@ void AC_MainWindow::controls_Pause() {
}
}
void AC_MainWindow::controls_Clear() {
playback->Clear();
}
void AC_MainWindow::controls_SetImage() {
QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"), "/home", tr("Image Files (*.png *.jpg)"));
if(fileName != "") {
@@ -691,6 +704,24 @@ void AC_MainWindow::controls_SetImage() {
if(!tblend_image.empty()) {
playback->setImage(tblend_image);
QMessageBox::information(this, tr("Loaded Image"), tr("Image set"));
} else {
QMessageBox::information(this, tr("Image Load failed"), tr("Could not load image"));
}
}
}
void AC_MainWindow::controls_SetKey() {
QString fileName = QFileDialog::getOpenFileName(this,tr("Open Color Key Image"), "/home", tr("Image Files (*.png)"));
if(fileName != "") {
cv::Mat tblend_image = cv::imread(fileName.toStdString());
if(!tblend_image.empty()) {
playback->setColorKey(tblend_image);
QString str_value;
QTextStream stream(&str_value);
stream << "ColorKey is (255,0,255)\n Image Set: " << fileName;
QMessageBox::information(this, tr("Loaded Image"), tr(str_value.toStdString().c_str()));
} else {
QMessageBox::information(this, tr("Image Load failed"), tr("Could not load ColorKey image"));
}
}
}

View File

@@ -31,9 +31,10 @@ public:
QComboBox *color_maps, *filters;
QMenu *file_menu, *controls_menu, *help_menu;
QAction *file_exit, *file_new_capture, *file_new_video;
QAction *controls_snapshot, *controls_pause, *controls_step, *controls_stop, *controls_setimage, *controls_showvideo;
QAction *controls_snapshot, *controls_pause, *controls_step, *controls_stop, *controls_setimage,*controls_setkey,*controls_showvideo, *clear_images;
QAction *help_about;
QRadioButton *filter_single, *filter_custom;
public slots:
void addClicked();
void rmvClicked();
@@ -48,6 +49,8 @@ public slots:
void controls_Step();
void controls_SetImage();
void controls_ShowVideo();
void controls_SetKey();
void controls_Clear();
void help_About();
void updateFrame(QImage img);
void stopRecording();

View File

@@ -152,7 +152,11 @@ void Playback::drawEffects(cv::Mat &frame) {
if(saturation_ > 0) {
ac::setSaturation(frame, saturation_);
}
if(colorkey_set == true && !color_image.empty()) {
cv::Mat cframe = frame.clone();
cv::Vec3b well_color(255,0,255);
ac::filterColorKeyed(well_color, ac::orig_frame, cframe, frame);
}
}
void Playback::drawFilter(cv::Mat &frame, std::pair<int, int> &filter) {
@@ -245,6 +249,15 @@ Playback::~Playback() {
#endif
}
void Playback::Clear() {
mutex.lock();
blend_set = false;
colorkey_set = false;
blend_image.release();
color_image.release();
mutex.unlock();
}
void Playback::Stop() {
stop = true;
alpha = 0;
@@ -280,6 +293,13 @@ void Playback::setImage(const cv::Mat &frame) {
mutex.unlock();
}
void Playback::setColorKey(const cv::Mat &image) {
mutex.lock();
colorkey_set = true;
color_image = image;
mutex.unlock();
}
void Playback::filterFade(cv::Mat &frame, std::pair<int, int> &filter1, std::pair<int, int> &filter2, double alpha) {
unsigned int h = frame.rows; // frame height
unsigned int w = frame.cols;// framew idth

View File

@@ -49,10 +49,12 @@ public:
bool setVideoCamera(int device, int res, cv::VideoWriter writer, bool record);
bool isStopped() const;
void run();
void Clear();
void msleep(int ms);
void setVector(std::vector<std::pair<int, int>> s);
void setOptions(bool n, int c);
void setImage(const cv::Mat &image);
void setColorKey(const cv::Mat &image);
void setStep();
void setDisplayed(bool shown);
void setIndexChanged(std::string name);

View File

@@ -7,7 +7,7 @@
#ifndef _QT_HEADERS__
#define _QT_HEADERS__
#define ac_version "v1.04"
#define ac_version "v1.05"
#include<QApplication>
#include<QMainWindow>