1 | // This file is part of OpenCV project. |
2 | // It is subject to the license terms in the LICENSE file found in the top-level directory |
3 | // of this distribution and at http://opencv.org/license.html |
4 | |
5 | |
6 | #include "precomp.hpp" |
7 | |
8 | #ifndef OPENCV_EXCLUDE_C_API |
9 | |
10 | CV_IMPL void |
11 | cvSplit( const void* srcarr, void* dstarr0, void* dstarr1, void* dstarr2, void* dstarr3 ) |
12 | { |
13 | void* dptrs[] = { dstarr0, dstarr1, dstarr2, dstarr3 }; |
14 | cv::Mat src = cv::cvarrToMat(arr: srcarr); |
15 | int i, j, nz = 0; |
16 | for( i = 0; i < 4; i++ ) |
17 | nz += dptrs[i] != 0; |
18 | CV_Assert( nz > 0 ); |
19 | std::vector<cv::Mat> dvec(nz); |
20 | std::vector<int> pairs(nz*2); |
21 | |
22 | for( i = j = 0; i < 4; i++ ) |
23 | { |
24 | if( dptrs[i] != 0 ) |
25 | { |
26 | dvec[j] = cv::cvarrToMat(arr: dptrs[i]); |
27 | CV_Assert( dvec[j].size() == src.size() ); |
28 | CV_Assert( dvec[j].depth() == src.depth() ); |
29 | CV_Assert( dvec[j].channels() == 1 ); |
30 | CV_Assert( i < src.channels() ); |
31 | pairs[j*2] = i; |
32 | pairs[j*2+1] = j; |
33 | j++; |
34 | } |
35 | } |
36 | if( nz == src.channels() ) |
37 | cv::split( m: src, mv: dvec ); |
38 | else |
39 | { |
40 | cv::mixChannels( src: &src, nsrcs: 1, dst: &dvec[0], ndsts: nz, fromTo: &pairs[0], npairs: nz ); |
41 | } |
42 | } |
43 | |
44 | |
45 | CV_IMPL void |
46 | cvMerge( const void* srcarr0, const void* srcarr1, const void* srcarr2, |
47 | const void* srcarr3, void* dstarr ) |
48 | { |
49 | const void* sptrs[] = { srcarr0, srcarr1, srcarr2, srcarr3 }; |
50 | cv::Mat dst = cv::cvarrToMat(arr: dstarr); |
51 | int i, j, nz = 0; |
52 | for( i = 0; i < 4; i++ ) |
53 | nz += sptrs[i] != 0; |
54 | CV_Assert( nz > 0 ); |
55 | std::vector<cv::Mat> svec(nz); |
56 | std::vector<int> pairs(nz*2); |
57 | |
58 | for( i = j = 0; i < 4; i++ ) |
59 | { |
60 | if( sptrs[i] != 0 ) |
61 | { |
62 | svec[j] = cv::cvarrToMat(arr: sptrs[i]); |
63 | CV_Assert( svec[j].size == dst.size && |
64 | svec[j].depth() == dst.depth() && |
65 | svec[j].channels() == 1 && i < dst.channels() ); |
66 | pairs[j*2] = j; |
67 | pairs[j*2+1] = i; |
68 | j++; |
69 | } |
70 | } |
71 | |
72 | if( nz == dst.channels() ) |
73 | cv::merge( mv: svec, dst ); |
74 | else |
75 | { |
76 | cv::mixChannels( src: &svec[0], nsrcs: nz, dst: &dst, ndsts: 1, fromTo: &pairs[0], npairs: nz ); |
77 | } |
78 | } |
79 | |
80 | |
81 | CV_IMPL void |
82 | cvMixChannels( const CvArr** src, int src_count, |
83 | CvArr** dst, int dst_count, |
84 | const int* from_to, int pair_count ) |
85 | { |
86 | cv::AutoBuffer<cv::Mat> buf(src_count + dst_count); |
87 | |
88 | int i; |
89 | for( i = 0; i < src_count; i++ ) |
90 | buf[i] = cv::cvarrToMat(arr: src[i]); |
91 | for( i = 0; i < dst_count; i++ ) |
92 | buf[i+src_count] = cv::cvarrToMat(arr: dst[i]); |
93 | cv::mixChannels(src: &buf[0], nsrcs: src_count, dst: &buf[src_count], ndsts: dst_count, fromTo: from_to, npairs: pair_count); |
94 | } |
95 | |
96 | |
97 | CV_IMPL void |
98 | cvConvertScaleAbs( const void* srcarr, void* dstarr, |
99 | double scale, double shift ) |
100 | { |
101 | cv::Mat src = cv::cvarrToMat(arr: srcarr), dst = cv::cvarrToMat(arr: dstarr); |
102 | CV_Assert( src.size == dst.size && dst.type() == CV_8UC(src.channels())); |
103 | cv::convertScaleAbs( src, dst, alpha: scale, beta: shift ); |
104 | } |
105 | |
106 | |
107 | CV_IMPL void |
108 | cvConvertScale( const void* srcarr, void* dstarr, |
109 | double scale, double shift ) |
110 | { |
111 | cv::Mat src = cv::cvarrToMat(arr: srcarr), dst = cv::cvarrToMat(arr: dstarr); |
112 | |
113 | CV_Assert( src.size == dst.size && src.channels() == dst.channels() ); |
114 | src.convertTo(m: dst, rtype: dst.type(), alpha: scale, beta: shift); |
115 | } |
116 | |
117 | |
118 | CV_IMPL void cvLUT( const void* srcarr, void* dstarr, const void* lutarr ) |
119 | { |
120 | cv::Mat src = cv::cvarrToMat(arr: srcarr), dst = cv::cvarrToMat(arr: dstarr), lut = cv::cvarrToMat(arr: lutarr); |
121 | |
122 | CV_Assert( dst.size() == src.size() && dst.type() == CV_MAKETYPE(lut.depth(), src.channels()) ); |
123 | cv::LUT( src, lut, dst ); |
124 | } |
125 | |
126 | |
127 | CV_IMPL void cvNormalize( const CvArr* srcarr, CvArr* dstarr, |
128 | double a, double b, int norm_type, const CvArr* maskarr ) |
129 | { |
130 | cv::Mat src = cv::cvarrToMat(arr: srcarr), dst = cv::cvarrToMat(arr: dstarr), mask; |
131 | if( maskarr ) |
132 | mask = cv::cvarrToMat(arr: maskarr); |
133 | CV_Assert( dst.size() == src.size() && src.channels() == dst.channels() ); |
134 | cv::normalize( src, dst, alpha: a, beta: b, norm_type, dtype: dst.type(), mask ); |
135 | } |
136 | |
137 | #endif // OPENCV_EXCLUDE_C_API |
138 | |