| 2011 | } |
| 2012 | |
| 2013 | void cv::transpose( InputArray _src, OutputArray _dst ) |
| 2014 | { |
| 2015 | Mat src = _src.getMat(); |
| 2016 | size_t esz = src.elemSize(); |
| 2017 | CV_Assert( src.dims <= 2 && esz <= (size_t)32 ); |
| 2018 | |
| 2019 | _dst.create(src.cols, src.rows, src.type()); |
| 2020 | Mat dst = _dst.getMat(); |
| 2021 | |
| 2022 | // handle the case of single-column/single-row matrices, stored in STL vectors. |
| 2023 | if( src.rows != dst.cols || src.cols != dst.rows ) |
| 2024 | { |
| 2025 | CV_Assert( src.size() == dst.size() && (src.cols == 1 || src.rows == 1) ); |
| 2026 | src.copyTo(dst); |
| 2027 | return; |
| 2028 | } |
| 2029 | |
| 2030 | if( dst.data == src.data ) |
| 2031 | { |
| 2032 | TransposeInplaceFunc func = transposeInplaceTab[esz]; |
| 2033 | CV_Assert( func != 0 ); |
| 2034 | func( dst.data, dst.step, dst.rows ); |
| 2035 | } |
| 2036 | else |
| 2037 | { |
| 2038 | TransposeFunc func = transposeTab[esz]; |
| 2039 | CV_Assert( func != 0 ); |
| 2040 | func( src.data, src.step, dst.data, dst.step, src.size() ); |
| 2041 | } |
| 2042 | } |
| 2043 | |
| 2044 | |
| 2045 | ////////////////////////////////////// completeSymm ///////////////////////////////////////// |