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.
139 lines
3.8 KiB
139 lines
3.8 KiB
#ifndef CVVISUAL_QTUTIL_HPP |
|
#define CVVISUAL_QTUTIL_HPP |
|
|
|
#include <limits> |
|
#include <vector> |
|
#include <stdexcept> |
|
|
|
#include <QImage> |
|
#include <QPixmap> |
|
#include <QSet> |
|
|
|
#include "opencv2/core.hpp" |
|
#include "opencv2/imgproc.hpp" |
|
#include "opencv2/features2d.hpp" |
|
|
|
|
|
namespace cvv |
|
{ |
|
namespace qtutil |
|
{ |
|
|
|
/** |
|
* @brief Represents the staus of an image conversion. |
|
*/ |
|
enum class ImageConversionResult |
|
{ |
|
SUCCESS, |
|
MAT_EMPTY, |
|
MAT_NOT_2D, |
|
FLOAT_OUT_OF_0_TO_1, |
|
NUMBER_OF_CHANNELS_NOT_SUPPORTED, |
|
MAT_INVALID_SIZE, |
|
MAT_UNSUPPORTED_DEPTH |
|
}; |
|
|
|
/** |
|
* @brief Converts a cv::Mat to a QImage. |
|
* @param mat The mat to convert. |
|
* @param skipFloatRangeTest If true Mats with floating types will be checked |
|
* wheather all values are within [0,1]. |
|
* @param threads Number of threads to use (0 will use 1 thread). |
|
* @return The status of the conversion and the converted mat. |
|
*/ |
|
std::pair<ImageConversionResult, QImage> |
|
convertMatToQImage(const cv::Mat &mat, bool skipFloatRangeTest = true, |
|
unsigned int threads = |
|
std::numeric_limits<unsigned int>::max()); |
|
|
|
/** |
|
* @brief Converts a cv::Mat to a QPixmap. |
|
* @param mat The mat to convert. |
|
* @param skipFloatRangeTest If true Mats with floating types will be checked |
|
* wheather all values are within [0,1]. |
|
* @param threads Number of threads to use (0 will use 1 thread). |
|
* @return The status of the conversion and the converted mat. |
|
*/ |
|
std::pair<ImageConversionResult, QPixmap> |
|
convertMatToQPixmap(const cv::Mat &mat, bool skipFloatRangeTest = true, |
|
unsigned int threads = |
|
std::numeric_limits<unsigned int>::max()); |
|
|
|
/** |
|
* @brief Creates a QSet<QString> with the given string as an inherited value. |
|
*/ |
|
QSet<QString> createStringSet(QString string); |
|
|
|
/** |
|
* @brief Returns a string containing the type of the mat. |
|
* @param mat The mat. |
|
* @return A string containing the type of the mat. |
|
* (first = flase when the depth is unknown) |
|
*/ |
|
std::pair<bool, QString> typeToQString(const cv::Mat &mat); |
|
|
|
/** |
|
* @brief Returns a string descripton to a image conversion result. |
|
* @param result The image conversion result. |
|
* @return The descripton. |
|
*/ |
|
QString conversionResultToString(const ImageConversionResult &result); |
|
|
|
/** |
|
* @brief Splits a mat in multiple one channel mats. |
|
* @param mat The mat. |
|
* @return The splitted mats. |
|
*/ |
|
std::vector<cv::Mat> splitChannels(const cv::Mat &mat); |
|
|
|
/** |
|
* @brief Merges multiple one channel mats into one. |
|
* @param mats The mats to merge. |
|
* @return Merged mat |
|
* @throw std::invalid_argument If the images have different depths. Or one mat |
|
* has more than 1 |
|
* channel. |
|
*/ |
|
cv::Mat mergeChannels(std::vector<cv::Mat> mats); |
|
|
|
/** |
|
* @brief Opens the users default browser with the topic help page. |
|
* Current URL: cvv.mostlynerdless.de/help.php?topic=[topic] |
|
* |
|
* Topics can be added via appending the doc/topics.yml file. |
|
* |
|
* @param topic help topic |
|
*/ |
|
void openHelpBrowser(const QString &topic); |
|
|
|
/** |
|
* @brief Set the default setting for a given stettings key and scope. |
|
* It doesn't override existing settings. |
|
* @param scope given settings scope |
|
* @param key given settings key |
|
* @param value default value of the setting |
|
*/ |
|
void setDefaultSetting(const QString &scope, const QString &key, |
|
const QString &value); |
|
|
|
/** |
|
* @brief Set the setting for a given stettings key and scope. |
|
* @param scope given settings scope |
|
* @param key given settings key |
|
* @param value new value of the setting |
|
*/ |
|
void setSetting(const QString &scope, const QString &key, const QString &value); |
|
|
|
/** |
|
* @brief Get the current setting [key] in the given scope. |
|
* Please use `setDefaultSetting` to set a default value that's other than |
|
* an empty QString. |
|
* @param scope given scope (e.g. 'Overview') |
|
* @param key settings key (e.g. 'autoOpenTabs') |
|
* @return settings string |
|
*/ |
|
QString getSetting(const QString &scope, const QString &key); |
|
} |
|
} |
|
|
|
#endif
|
|
|