Restored function to rescale pixel values before imshow

This commit is contained in:
Maksim Shabunin
2018-11-23 19:14:14 +03:00
parent f07856eab9
commit db1c8b3f9e
6 changed files with 143 additions and 72 deletions
+101 -45
View File
@@ -44,54 +44,110 @@
namespace opencv_test { namespace {
#if defined HAVE_GTK || defined HAVE_QT || defined HAVE_WIN32UI || defined HAVE_COCOA
class CV_HighGuiOnlyGuiTest : public cvtest::BaseTest
inline void verify_size(const std::string &nm, const cv::Mat &img)
{
protected:
void run(int);
};
static void Foo(int /*k*/, void* /*z*/) {}
void CV_HighGuiOnlyGuiTest::run( int /*start_from */)
{
ts->printf(ts->LOG, "GUI 0\n");
destroyAllWindows();
ts->printf(ts->LOG, "GUI 1\n");
namedWindow("Win");
ts->printf(ts->LOG, "GUI 2\n");
Mat m(256, 256, CV_8U);
m = Scalar(128);
ts->printf(ts->LOG, "GUI 3\n");
imshow("Win", m);
ts->printf(ts->LOG, "GUI 4\n");
int value = 50;
ts->printf(ts->LOG, "GUI 5\n");
createTrackbar( "trackbar", "Win", &value, 100, Foo, &value);
ts->printf(ts->LOG, "GUI 6\n");
getTrackbarPos( "trackbar", "Win" );
ts->printf(ts->LOG, "GUI 7\n");
waitKey(500);
ts->printf(ts->LOG, "GUI 8\n");
Rect rc = getWindowImageRect("Win");
std::cout << "window image rect: " << rc << std::endl;
ts->printf(ts->LOG, "GUI 9\n");
destroyAllWindows();
ts->set_failed_test_info(cvtest::TS::OK);
EXPECT_NO_THROW(imshow(nm, img));
EXPECT_EQ(-1, waitKey(100));
Rect rc;
EXPECT_NO_THROW(rc = getWindowImageRect(nm));
EXPECT_EQ(rc.size(), img.size());
}
TEST(Highgui_GUI, regression) { CV_HighGuiOnlyGuiTest test; test.safe_run(); }
#if !defined HAVE_GTK && !defined HAVE_QT && !defined HAVE_WIN32UI && !defined HAVE_COCOA
TEST(Highgui_GUI, DISABLED_regression)
#else
TEST(Highgui_GUI, regression)
#endif
{
const std::string window_name("opencv_highgui_test_window");
const cv::Size image_size(800, 600);
EXPECT_NO_THROW(destroyAllWindows());
ASSERT_NO_THROW(namedWindow(window_name));
const vector<int> channels = {1, 3, 4};
const vector<int> depths = {CV_8U, CV_8S, CV_16U, CV_16S, CV_32F, CV_64F};
for(int cn : channels)
{
SCOPED_TRACE(cn);
for(int depth : depths)
{
SCOPED_TRACE(depth);
double min_val = 0.;
double max_val = 256.;
switch(depth)
{
case CV_8S:
min_val = static_cast<double>(-0x7F);
max_val = static_cast<double>(0x7F + 1);
break;
case CV_16S:
min_val = static_cast<double>(-0x7FFF);
max_val = static_cast<double>(0x7FFF + 1);
break;
case CV_16U:
max_val = static_cast<double>(0xFFFF + 1);
break;
case CV_32F:
case CV_64F:
max_val = 1.0;
break;
}
Mat m = cvtest::randomMat(TS::ptr()->get_rng(), image_size, CV_MAKE_TYPE(depth, cn), min_val, max_val, false);
verify_size(window_name, m);
Mat bgr(image_size, CV_MAKE_TYPE(depth, cn));
int b_g = image_size.width / 3, g_r = b_g * 2;
if (cn > 1)
{
bgr.colRange(0, b_g).setTo(cv::Scalar(max_val, min_val, min_val));
bgr.colRange(b_g, g_r).setTo(cv::Scalar(min_val, max_val, min_val));
bgr.colRange(g_r, image_size.width).setTo(cv::Scalar(min_val, min_val, max_val));
}
else
{
bgr.colRange(0, b_g).setTo(cv::Scalar::all(min_val));
bgr.colRange(b_g, g_r).setTo(cv::Scalar::all((min_val + max_val) / 2));
bgr.colRange(g_r, image_size.width).setTo(cv::Scalar::all(max_val));
}
verify_size(window_name, bgr);
}
}
EXPECT_NO_THROW(destroyAllWindows());
}
//==================================================================================================
static void Foo(int, void* counter)
{
if (counter)
{
int *counter_int = static_cast<int*>(counter);
(*counter_int)++;
}
}
#if !defined HAVE_GTK && !defined HAVE_QT && !defined HAVE_WIN32UI
// && !defined HAVE_COCOA - TODO: fails on Mac?
TEST(Highgui_GUI, DISABLED_trackbar)
#else
TEST(Highgui_GUI, trackbar)
#endif
{
int value = 50;
int callback_count = 0;
const std::string window_name("trackbar_test_window");
const std::string trackbar_name("trackbar");
EXPECT_NO_THROW(destroyAllWindows());
ASSERT_NO_THROW(namedWindow(window_name));
EXPECT_EQ((int)1, createTrackbar(trackbar_name, window_name, &value, 100, Foo, &callback_count));
EXPECT_EQ(value, getTrackbarPos(trackbar_name, window_name));
EXPECT_EQ(0, callback_count);
EXPECT_NO_THROW(setTrackbarPos(trackbar_name, window_name, 90));
EXPECT_EQ(1, callback_count);
EXPECT_EQ(90, value);
EXPECT_EQ(90, getTrackbarPos(trackbar_name, window_name));
EXPECT_NO_THROW(destroyAllWindows());
}
}} // namespace