| 1641 | } |
| 1642 | |
| 1643 | template<typename T, typename WT> static void |
| 1644 | diagtransform_( const T* src, T* dst, const WT* m, int len, int cn, int ) |
| 1645 | { |
| 1646 | int x; |
| 1647 | |
| 1648 | if( cn == 2 ) |
| 1649 | { |
| 1650 | for( x = 0; x < len*2; x += 2 ) |
| 1651 | { |
| 1652 | T t0 = saturate_cast<T>(m[0]*src[x] + m[2]); |
| 1653 | T t1 = saturate_cast<T>(m[4]*src[x+1] + m[5]); |
| 1654 | dst[x] = t0; dst[x+1] = t1; |
| 1655 | } |
| 1656 | } |
| 1657 | else if( cn == 3 ) |
| 1658 | { |
| 1659 | for( x = 0; x < len*3; x += 3 ) |
| 1660 | { |
| 1661 | T t0 = saturate_cast<T>(m[0]*src[x] + m[3]); |
| 1662 | T t1 = saturate_cast<T>(m[5]*src[x+1] + m[7]); |
| 1663 | T t2 = saturate_cast<T>(m[10]*src[x+2] + m[11]); |
| 1664 | dst[x] = t0; dst[x+1] = t1; dst[x+2] = t2; |
| 1665 | } |
| 1666 | } |
| 1667 | else if( cn == 4 ) |
| 1668 | { |
| 1669 | for( x = 0; x < len*4; x += 4 ) |
| 1670 | { |
| 1671 | T t0 = saturate_cast<T>(m[0]*src[x] + m[4]); |
| 1672 | T t1 = saturate_cast<T>(m[6]*src[x+1] + m[9]); |
| 1673 | dst[x] = t0; dst[x+1] = t1; |
| 1674 | t0 = saturate_cast<T>(m[12]*src[x+2] + m[14]); |
| 1675 | t1 = saturate_cast<T>(m[18]*src[x+3] + m[19]); |
| 1676 | dst[x+2] = t0; dst[x+3] = t1; |
| 1677 | } |
| 1678 | } |
| 1679 | else |
| 1680 | { |
| 1681 | for( x = 0; x < len; x++, src += cn, dst += cn ) |
| 1682 | { |
| 1683 | const WT* _m = m; |
| 1684 | for( int j = 0; j < cn; j++, _m += cn + 1 ) |
| 1685 | dst[j] = saturate_cast<T>(src[j]*_m[j] + _m[cn]); |
| 1686 | } |
| 1687 | } |
| 1688 | } |
| 1689 | |
| 1690 | static void |
| 1691 | diagtransform_8u(const uchar* src, uchar* dst, const float* m, int len, int scn, int dcn) |
no outgoing calls
no test coverage detected