MCPcopy Create free account
hub / github.com/creatale/node-dv / norm

Method norm

deps/opencv/modules/core/src/stat.cpp:1899–2259  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1897
1898
1899double cv::norm( InputArray _src1, InputArray _src2, int normType, InputArray _mask )
1900{
1901 if( normType & CV_RELATIVE )
1902 {
1903#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
1904 Mat src1 = _src1.getMat(), src2 = _src2.getMat(), mask = _mask.getMat();
1905
1906 CV_Assert( src1.size == src2.size && src1.type() == src2.type() );
1907
1908 normType &= 7;
1909 CV_Assert( normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2 || normType == NORM_L2SQR ||
1910 ((normType == NORM_HAMMING || normType == NORM_HAMMING2) && src1.type() == CV_8U) );
1911 size_t total_size = src1.total();
1912 int rows = src1.size[0], cols = (int)(total_size/rows);
1913 if( (src1.dims == 2 || (src1.isContinuous() && src2.isContinuous() && mask.isContinuous()))
1914 && cols > 0 && (size_t)rows*cols == total_size
1915 && (normType == NORM_INF || normType == NORM_L1 ||
1916 normType == NORM_L2 || normType == NORM_L2SQR) )
1917 {
1918 IppiSize sz = { cols, rows };
1919 int type = src1.type();
1920 if( !mask.empty() )
1921 {
1922 typedef IppStatus (CV_STDCALL* ippiMaskNormRelFuncC1)(const void *, int, const void *, int, const void *, int, IppiSize, Ipp64f *);
1923 ippiMaskNormRelFuncC1 ippFuncC1 =
1924 normType == NORM_INF ?
1925 (type == CV_8UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_Inf_8u_C1MR :
1926 type == CV_8SC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_Inf_8s_C1MR :
1927 type == CV_16UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_Inf_16u_C1MR :
1928 type == CV_32FC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_Inf_32f_C1MR :
1929 0) :
1930 normType == NORM_L1 ?
1931 (type == CV_8UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L1_8u_C1MR :
1932 type == CV_8SC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L1_8s_C1MR :
1933 type == CV_16UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L1_16u_C1MR :
1934 type == CV_32FC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L1_32f_C1MR :
1935 0) :
1936 normType == NORM_L2 || normType == NORM_L2SQR ?
1937 (type == CV_8UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L2_8u_C1MR :
1938 type == CV_8SC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L2_8s_C1MR :
1939 type == CV_16UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L2_16u_C1MR :
1940 type == CV_32FC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L2_32f_C1MR :
1941 0) : 0;
1942 if( ippFuncC1 )
1943 {
1944 Ipp64f norm;
1945 if( ippFuncC1(src1.data, (int)src1.step[0], src2.data, (int)src2.step[0], mask.data, (int)mask.step[0], sz, &norm) >= 0 )
1946 return normType == NORM_L2SQR ? (double)(norm * norm) : (double)norm;
1947 }
1948 }
1949 else
1950 {
1951 typedef IppStatus (CV_STDCALL* ippiNormRelFunc)(const void *, int, const void *, int, IppiSize, Ipp64f *, IppHintAlgorithm hint);
1952 ippiNormRelFunc ippFunc =
1953 normType == NORM_INF ?
1954 (type == CV_8UC1 ? (ippiNormRelFunc)ippiNormRel_Inf_8u_C1R :
1955 type == CV_16UC1 ? (ippiNormRelFunc)ippiNormRel_Inf_16u_C1R :
1956 type == CV_16SC1 ? (ippiNormRelFunc)ippiNormRel_Inf_16s_C1R :

Callers

nothing calls this directly

Calls 13

sqrtFunction · 0.85
normHammingFunction · 0.85
normFunction · 0.70
maxFunction · 0.70
minFunction · 0.70
getMatMethod · 0.45
typeMethod · 0.45
totalMethod · 0.45
isContinuousMethod · 0.45
emptyMethod · 0.45
depthMethod · 0.45
channelsMethod · 0.45

Tested by

no test coverage detected