Skip to content

Commit 84a0a91

Browse files
committed
Merge branch 'master' of https://github.com/opencv/opencv into interpMultichannelImg
Added assertios to remap and warpAffine functions As @mshabunin said, remap and warpAffine functions do not support more than 4 channels in Bicubic and Lanczos4 interpolation modes. Assertions were added. Appropriate test was chenged. resolves opencv#8272
2 parents c4ae5c0 + 49e16a3 commit 84a0a91

File tree

107 files changed

+2554
-852
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+2554
-852
lines changed

3rdparty/openvx/hal/openvx_hal.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <cfloat>
1212
#include <climits>
1313
#include <cmath>
14+
#include <cstring>
1415

1516
//==================================================================================================
1617
// utility
@@ -600,7 +601,7 @@ int ovx_hal_sepFilterInit(cvhalFilter2D **filter_context, int src_type, int dst_
600601
{
601602
if (!filter_context || !kernelx_data || !kernely_data || delta != 0 ||
602603
src_type != CV_8UC1 || (dst_type != CV_8UC1 && dst_type != CV_16SC1) ||
603-
kernelx_length % 2 == 0 || kernely_length % 2 == 0 || anchor_x != kernelx_length / 2 || anchor_y != kernely_length / 2)
604+
kernelx_length != 3 || kernely_length != 3 || anchor_x != 1 || anchor_y != 1)
604605
return CV_HAL_ERROR_NOT_IMPLEMENTED;
605606

606607
ivx::border_t border;
@@ -1076,7 +1077,7 @@ int ovx_hal_integral(int depth, int sdepth, int, const uchar * a, size_t astep,
10761077
ib = ivx::Image::createFromHandle(ctx, VX_DF_IMAGE_U32,
10771078
ivx::Image::createAddressing(w, h, 4, (vx_int32)bstep), (unsigned int *)(b + bstep + sizeof(unsigned int)));
10781079
ivx::IVX_CHECK_STATUS(vxuIntegralImage(ctx, ia, ib));
1079-
memset(b, 0, (w + 1) * sizeof(unsigned int));
1080+
std::memset(b, 0, (w + 1) * sizeof(unsigned int));
10801081
b += bstep;
10811082
for (int i = 0; i < h; i++, b += bstep)
10821083
{

3rdparty/openvx/include/ivx.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ static const vx_enum VX_INTERPOLATION_NEAREST_NEIGHBOR = VX_INTERPOLATION_TYPE_N
3232
static const vx_enum VX_BORDER_CONSTANT = VX_BORDER_MODE_CONSTANT;
3333
static const vx_enum VX_BORDER_REPLICATE = VX_BORDER_MODE_REPLICATE;
3434

35+
#else
36+
37+
#ifdef IVX_RENAMED_REFS
38+
static const vx_enum VX_REF_ATTRIBUTE_TYPE = VX_REFERENCE_TYPE;
39+
#endif
40+
3541
#endif
3642

3743
#ifndef IVX_USE_CXX98

CMakeLists.txt

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,14 @@ if(POLICY CMP0042)
9191
cmake_policy(SET CMP0042 NEW)
9292
endif()
9393

94+
if(POLICY CMP0051)
95+
cmake_policy(SET CMP0051 NEW)
96+
endif()
97+
98+
if(POLICY CMP0056)
99+
cmake_policy(SET CMP0056 NEW)
100+
endif()
101+
94102
include(cmake/OpenCVUtils.cmake)
95103

96104
# must go before the project command
@@ -280,16 +288,6 @@ OCV_OPTION(ENABLE_COVERAGE "Enable coverage collection with GCov"
280288
OCV_OPTION(ENABLE_OMIT_FRAME_POINTER "Enable -fomit-frame-pointer for GCC" ON IF CMAKE_COMPILER_IS_GNUCXX AND NOT (APPLE AND CMAKE_COMPILER_IS_CLANGCXX) )
281289
OCV_OPTION(ENABLE_POWERPC "Enable PowerPC for GCC" ON IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
282290
OCV_OPTION(ENABLE_FAST_MATH "Enable -ffast-math (not recommended for GCC 4.6.x)" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
283-
OCV_OPTION(ENABLE_SSE "Enable SSE instructions" ON IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
284-
OCV_OPTION(ENABLE_SSE2 "Enable SSE2 instructions" ON IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
285-
OCV_OPTION(ENABLE_SSE3 "Enable SSE3 instructions" ON IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX OR CV_ICC) AND (X86 OR X86_64)) )
286-
OCV_OPTION(ENABLE_SSSE3 "Enable SSSE3 instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
287-
OCV_OPTION(ENABLE_SSE41 "Enable SSE4.1 instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX OR CV_ICC) AND (X86 OR X86_64)) )
288-
OCV_OPTION(ENABLE_SSE42 "Enable SSE4.2 instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
289-
OCV_OPTION(ENABLE_POPCNT "Enable POPCNT instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
290-
OCV_OPTION(ENABLE_AVX "Enable AVX instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
291-
OCV_OPTION(ENABLE_AVX2 "Enable AVX2 instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
292-
OCV_OPTION(ENABLE_FMA3 "Enable FMA3 instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
293291
OCV_OPTION(ENABLE_NEON "Enable NEON instructions" "${NEON}" IF CMAKE_COMPILER_IS_GNUCXX AND (ARM OR AARCH64 OR IOS) )
294292
OCV_OPTION(ENABLE_VFPV3 "Enable VFPv3-D32 instructions" OFF IF CMAKE_COMPILER_IS_GNUCXX AND (ARM OR AARCH64 OR IOS) )
295293
OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too noisy" OFF )
@@ -299,6 +297,9 @@ OCV_OPTION(ENABLE_IMPL_COLLECTION "Collect implementation data on function c
299297
OCV_OPTION(ENABLE_INSTRUMENTATION "Instrument functions to collect calls trace and performance" OFF )
300298
OCV_OPTION(ENABLE_GNU_STL_DEBUG "Enable GNU STL Debug mode (defines _GLIBCXX_DEBUG)" OFF IF ((NOT CMAKE_VERSION VERSION_LESS "2.8.11") AND CMAKE_COMPILER_IS_GNUCXX) )
301299
OCV_OPTION(GENERATE_ABI_DESCRIPTOR "Generate XML file for abi_compliance_checker tool" OFF IF UNIX)
300+
OCV_OPTION(CV_ENABLE_INTRINSICS "Use intrinsic-based optimized code" ON )
301+
OCV_OPTION(CV_DISABLE_OPTIMIZATION "Disable explicit optimized code (dispatched code/intrinsics/loop unrolling/etc)" OFF )
302+
302303

303304
OCV_OPTION(DOWNLOAD_EXTERNAL_TEST_DATA "Download external test data (Python executable and OPENCV_TEST_DATA_PATH environment variable may be required)" OFF )
304305

@@ -499,6 +500,9 @@ if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL
499500
set(CMAKE_BUILD_TYPE Release)
500501
endif()
501502

503+
# --- Python Support ---
504+
include(cmake/OpenCVDetectPython.cmake)
505+
502506
include(cmake/OpenCVCompilerOptions.cmake)
503507

504508

@@ -578,9 +582,6 @@ else()
578582
unset(DOXYGEN_FOUND CACHE)
579583
endif()
580584

581-
# --- Python Support ---
582-
include(cmake/OpenCVDetectPython.cmake)
583-
584585
# --- Java Support ---
585586
include(cmake/OpenCVDetectApacheAnt.cmake)
586587
if(ANDROID)
@@ -869,6 +870,33 @@ if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
869870
status(" Configuration:" ${CMAKE_BUILD_TYPE})
870871
endif()
871872

873+
874+
# ========================= CPU code generation mode =========================
875+
status("")
876+
status(" CPU/HW features:")
877+
status(" Baseline:" "${CPU_BASELINE_FINAL}")
878+
if(NOT CPU_BASELINE STREQUAL CPU_BASELINE_FINAL)
879+
status(" requested:" "${CPU_BASELINE}")
880+
endif()
881+
if(CPU_BASELINE_REQUIRE)
882+
status(" required:" "${CPU_BASELINE_REQUIRE}")
883+
endif()
884+
if(CPU_BASELINE_DISABLE)
885+
status(" disabled:" "${CPU_BASELINE_DISABLE}")
886+
endif()
887+
if(CPU_DISPATCH_FINAL OR CPU_DISPATCH)
888+
status(" Dispatched code generation:" "${CPU_DISPATCH_FINAL}")
889+
if(NOT CPU_DISPATCH STREQUAL CPU_DISPATCH_FINAL)
890+
status(" requested:" "${CPU_DISPATCH}")
891+
endif()
892+
if(CPU_DISPATCH_REQUIRE)
893+
status(" required:" "${CPU_DISPATCH_REQUIRE}")
894+
endif()
895+
foreach(OPT ${CPU_DISPATCH_FINAL})
896+
status(" ${OPT} (${CPU_${OPT}_USAGE_COUNT} files):" "+ ${CPU_DISPATCH_${OPT}_INCLUDED}")
897+
endforeach()
898+
endif()
899+
872900
# ========================== C/C++ options ==========================
873901
if(CMAKE_CXX_COMPILER_VERSION)
874902
set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CXX_COMPILER_VERSION})")

apps/interactive-calibration/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
set(OPENCV_INTERACTIVECALIBRATION_DEPS opencv_core opencv_imgproc opencv_features2d opencv_aruco opencv_highgui opencv_calib3d opencv_videoio)
1+
set(OPENCV_INTERACTIVECALIBRATION_DEPS opencv_core opencv_imgproc opencv_features2d opencv_highgui opencv_calib3d opencv_videoio)
2+
if(${BUILD_opencv_aruco})
3+
list(APPEND OPENCV_INTERACTIVECALIBRATION_DEPS opencv_aruco)
4+
endif()
25
ocv_check_dependencies(${OPENCV_INTERACTIVECALIBRATION_DEPS})
36

47
if(NOT OCV_DEPENDENCIES_FOUND)

apps/interactive-calibration/frameProcessor.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
#include <opencv2/calib3d.hpp>
99
#include <opencv2/imgproc.hpp>
10-
#include <opencv2/aruco/charuco.hpp>
1110
#include <opencv2/highgui.hpp>
1211

1312
#include <vector>
@@ -75,6 +74,7 @@ bool CalibProcessor::detectAndParseChessboard(const cv::Mat &frame)
7574

7675
bool CalibProcessor::detectAndParseChAruco(const cv::Mat &frame)
7776
{
77+
#ifdef HAVE_OPENCV_ARUCO
7878
cv::Ptr<cv::aruco::Board> board = mCharucoBoard.staticCast<cv::aruco::Board>();
7979

8080
std::vector<std::vector<cv::Point2f> > corners, rejected;
@@ -95,14 +95,16 @@ bool CalibProcessor::detectAndParseChAruco(const cv::Mat &frame)
9595
}
9696
centerX /= currentCharucoCorners.size[0];
9797
centerY /= currentCharucoCorners.size[0];
98-
//cv::circle(frame, cv::Point2f(centerX, centerY), 10, cv::Scalar(0, 255, 0), 10);
98+
9999
mTemplateLocations.insert(mTemplateLocations.begin(), cv::Point2f(centerX, centerY));
100100
cv::aruco::drawDetectedCornersCharuco(frame, currentCharucoCorners, currentCharucoIds);
101101
mCurrentCharucoCorners = currentCharucoCorners;
102102
mCurrentCharucoIds = currentCharucoIds;
103103
return true;
104104
}
105-
105+
#else
106+
(void)frame;
107+
#endif
106108
return false;
107109
}
108110

@@ -231,6 +233,7 @@ bool CalibProcessor::checkLastFrame()
231233
}
232234
}
233235
else {
236+
#ifdef HAVE_OPENCV_ARUCO
234237
cv::Mat r, t, angles;
235238
std::vector<cv::Point3f> allObjPoints;
236239
allObjPoints.reserve(mCurrentCharucoIds.total());
@@ -248,6 +251,7 @@ bool CalibProcessor::checkLastFrame()
248251
mCalibData->allCharucoCorners.pop_back();
249252
mCalibData->allCharucoIds.pop_back();
250253
}
254+
#endif
251255
}
252256
return isFrameBad;
253257
}
@@ -266,10 +270,12 @@ CalibProcessor::CalibProcessor(cv::Ptr<calibrationData> data, captureParameters
266270
switch(mBoardType)
267271
{
268272
case chAruco:
273+
#ifdef HAVE_OPENCV_ARUCO
269274
mArucoDictionary = cv::aruco::getPredefinedDictionary(
270275
cv::aruco::PREDEFINED_DICTIONARY_NAME(capParams.charucoDictName));
271276
mCharucoBoard = cv::aruco::CharucoBoard::create(mBoardSize.width, mBoardSize.height, capParams.charucoSquareLenght,
272277
capParams.charucoMarkerSize, mArucoDictionary);
278+
#endif
273279
break;
274280
case AcirclesGrid:
275281
mBlobDetectorPtr = cv::SimpleBlobDetector::create();

apps/interactive-calibration/frameProcessor.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
#define FRAME_PROCESSOR_HPP
77

88
#include <opencv2/core.hpp>
9-
#include <opencv2/aruco/charuco.hpp>
109
#include <opencv2/calib3d.hpp>
10+
#ifdef HAVE_OPENCV_ARUCO
11+
#include <opencv2/aruco/charuco.hpp>
12+
#endif
1113

1214
#include "calibCommon.hpp"
1315
#include "calibController.hpp"
@@ -37,8 +39,10 @@ class CalibProcessor : public FrameProcessor
3739
cv::Mat mCurrentCharucoIds;
3840

3941
cv::Ptr<cv::SimpleBlobDetector> mBlobDetectorPtr;
42+
#ifdef HAVE_OPENCV_ARUCO
4043
cv::Ptr<cv::aruco::Dictionary> mArucoDictionary;
4144
cv::Ptr<cv::aruco::CharucoBoard> mCharucoBoard;
45+
#endif
4246

4347
int mNeededFramesNum;
4448
unsigned mDelayBetweenCaptures;

apps/interactive-calibration/main.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44

55
#include <opencv2/core.hpp>
66
#include <opencv2/calib3d.hpp>
7-
#include <opencv2/aruco/charuco.hpp>
87
#include <opencv2/cvconfig.h>
98
#include <opencv2/highgui.hpp>
109

10+
#ifdef HAVE_OPENCV_ARUCO
11+
#include <opencv2/aruco/charuco.hpp>
12+
#endif
13+
1114
#include <string>
1215
#include <vector>
1316
#include <stdexcept>
@@ -50,31 +53,27 @@ bool calib::showOverlayMessage(const std::string& message)
5053
#endif
5154
}
5255

53-
static void deleteButton(int state, void* data)
56+
static void deleteButton(int, void* data)
5457
{
55-
state++; //to avoid gcc warnings
5658
(static_cast<cv::Ptr<calibDataController>*>(data))->get()->deleteLastFrame();
5759
calib::showOverlayMessage("Last frame deleted");
5860
}
5961

60-
static void deleteAllButton(int state, void* data)
62+
static void deleteAllButton(int, void* data)
6163
{
62-
state++;
6364
(static_cast<cv::Ptr<calibDataController>*>(data))->get()->deleteAllData();
6465
calib::showOverlayMessage("All frames deleted");
6566
}
6667

67-
static void saveCurrentParamsButton(int state, void* data)
68+
static void saveCurrentParamsButton(int, void* data)
6869
{
69-
state++;
7070
if((static_cast<cv::Ptr<calibDataController>*>(data))->get()->saveCurrentCameraParameters())
7171
calib::showOverlayMessage("Calibration parameters saved");
7272
}
7373

7474
#ifdef HAVE_QT
75-
static void switchVisualizationModeButton(int state, void* data)
75+
static void switchVisualizationModeButton(int, void* data)
7676
{
77-
state++;
7877
ShowProcessor* processor = static_cast<ShowProcessor*>(((cv::Ptr<FrameProcessor>*)data)->get());
7978
processor->switchVisualizationMode();
8079
}
@@ -103,6 +102,11 @@ int main(int argc, char** argv)
103102

104103
captureParameters capParams = paramsController.getCaptureParameters();
105104
internalParameters intParams = paramsController.getInternalParameters();
105+
#ifndef HAVE_OPENCV_ARUCO
106+
if(capParams.board == chAruco)
107+
CV_Error(cv::Error::StsNotImplemented, "Aruco module is disabled in current build configuration."
108+
" Consider usage of another calibration pattern\n");
109+
#endif
106110

107111
cv::TermCriteria solverTermCrit = cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS,
108112
intParams.solverMaxIters, intParams.solverEps);
@@ -172,6 +176,7 @@ int main(int argc, char** argv)
172176
calibrationFlags, solverTermCrit);
173177
}
174178
else {
179+
#ifdef HAVE_OPENCV_ARUCO
175180
cv::Ptr<cv::aruco::Dictionary> dictionary =
176181
cv::aruco::getPredefinedDictionary(cv::aruco::PREDEFINED_DICTIONARY_NAME(capParams.charucoDictName));
177182
cv::Ptr<cv::aruco::CharucoBoard> charucoboard =
@@ -183,6 +188,7 @@ int main(int argc, char** argv)
183188
globalData->cameraMatrix, globalData->distCoeffs,
184189
cv::noArray(), cv::noArray(), globalData->stdDeviations, cv::noArray(),
185190
globalData->perViewErrors, calibrationFlags, solverTermCrit);
191+
#endif
186192
}
187193
dataController->updateUndistortMap();
188194
dataController->printParametersToConsole(std::cout);

cmake/FindOpenVX.cmake

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,20 @@ endif()
2525

2626
if(OPENVX_INCLUDE_DIR AND OPENVX_LIBRARIES)
2727
set(HAVE_OPENVX TRUE)
28+
29+
try_compile(OPENVX_RENAMED_REF
30+
"${OpenCV_BINARY_DIR}"
31+
"${OpenCV_SOURCE_DIR}/cmake/checks/openvx_refenum_test.cpp"
32+
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${OPENVX_INCLUDE_DIR}"
33+
LINK_LIBRARIES ${OPENVX_LIBRARIES}
34+
OUTPUT_VARIABLE OUTPUT
35+
)
36+
if(OPENVX_RENAMED_REF)
37+
add_definitions(-DIVX_RENAMED_REFS=1)
38+
message(STATUS "OpenVX: Checking reference attribute name convention... New")
39+
else()
40+
message(STATUS "OpenVX: Checking reference attribute name convention... Old")
41+
endif()
2842
endif()
2943

3044
if(NOT HAVE_OPENVX)

0 commit comments

Comments
 (0)