| 1897 | |
| 1898 | |
| 1899 | double 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 : |
nothing calls this directly
no test coverage detected