|
|
@ -44,54 +44,110 @@ |
|
|
|
|
|
|
|
|
|
|
|
namespace opencv_test { namespace { |
|
|
|
namespace opencv_test { namespace { |
|
|
|
|
|
|
|
|
|
|
|
#if defined HAVE_GTK || defined HAVE_QT || defined HAVE_WIN32UI || defined HAVE_COCOA |
|
|
|
inline void verify_size(const std::string &nm, const cv::Mat &img) |
|
|
|
|
|
|
|
|
|
|
|
class CV_HighGuiOnlyGuiTest : public cvtest::BaseTest |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
protected: |
|
|
|
EXPECT_NO_THROW(imshow(nm, img)); |
|
|
|
void run(int); |
|
|
|
EXPECT_EQ(-1, waitKey(100)); |
|
|
|
}; |
|
|
|
Rect rc; |
|
|
|
|
|
|
|
EXPECT_NO_THROW(rc = getWindowImageRect(nm)); |
|
|
|
static void Foo(int /*k*/, void* /*z*/) {} |
|
|
|
EXPECT_EQ(rc.size(), img.size()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void CV_HighGuiOnlyGuiTest::run( int /*start_from */) |
|
|
|
#if !defined HAVE_GTK && !defined HAVE_QT && !defined HAVE_WIN32UI && !defined HAVE_COCOA |
|
|
|
|
|
|
|
TEST(Highgui_GUI, DISABLED_regression) |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
TEST(Highgui_GUI, regression) |
|
|
|
|
|
|
|
#endif |
|
|
|
{ |
|
|
|
{ |
|
|
|
ts->printf(ts->LOG, "GUI 0\n"); |
|
|
|
const std::string window_name("opencv_highgui_test_window"); |
|
|
|
destroyAllWindows(); |
|
|
|
const cv::Size image_size(800, 600); |
|
|
|
|
|
|
|
|
|
|
|
ts->printf(ts->LOG, "GUI 1\n"); |
|
|
|
EXPECT_NO_THROW(destroyAllWindows()); |
|
|
|
namedWindow("Win"); |
|
|
|
ASSERT_NO_THROW(namedWindow(window_name)); |
|
|
|
|
|
|
|
const vector<int> channels = {1, 3, 4}; |
|
|
|
ts->printf(ts->LOG, "GUI 2\n"); |
|
|
|
const vector<int> depths = {CV_8U, CV_8S, CV_16U, CV_16S, CV_32F, CV_64F}; |
|
|
|
Mat m(256, 256, CV_8U); |
|
|
|
for(int cn : channels) |
|
|
|
m = Scalar(128); |
|
|
|
{ |
|
|
|
|
|
|
|
SCOPED_TRACE(cn); |
|
|
|
ts->printf(ts->LOG, "GUI 3\n"); |
|
|
|
for(int depth : depths) |
|
|
|
imshow("Win", m); |
|
|
|
{ |
|
|
|
|
|
|
|
SCOPED_TRACE(depth); |
|
|
|
ts->printf(ts->LOG, "GUI 4\n"); |
|
|
|
double min_val = 0.; |
|
|
|
int value = 50; |
|
|
|
double max_val = 256.; |
|
|
|
|
|
|
|
switch(depth) |
|
|
|
ts->printf(ts->LOG, "GUI 5\n"); |
|
|
|
{ |
|
|
|
createTrackbar( "trackbar", "Win", &value, 100, Foo, &value); |
|
|
|
case CV_8S: |
|
|
|
|
|
|
|
min_val = static_cast<double>(-0x7F); |
|
|
|
ts->printf(ts->LOG, "GUI 6\n"); |
|
|
|
max_val = static_cast<double>(0x7F + 1); |
|
|
|
getTrackbarPos( "trackbar", "Win" ); |
|
|
|
break; |
|
|
|
|
|
|
|
case CV_16S: |
|
|
|
ts->printf(ts->LOG, "GUI 7\n"); |
|
|
|
min_val = static_cast<double>(-0x7FFF); |
|
|
|
waitKey(500); |
|
|
|
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()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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"); |
|
|
|
static void Foo(int, void* counter) |
|
|
|
destroyAllWindows(); |
|
|
|
{ |
|
|
|
ts->set_failed_test_info(cvtest::TS::OK); |
|
|
|
if (counter) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int *counter_int = static_cast<int*>(counter); |
|
|
|
|
|
|
|
(*counter_int)++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TEST(Highgui_GUI, regression) { CV_HighGuiOnlyGuiTest test; test.safe_run(); } |
|
|
|
#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 |
|
|
|
#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
|
|
|
|
}} // namespace
|
|
|
|