Given the following conclusion:
[11233, 11345, 11434, 10897] [44, 44, 45, 43] [-31, 81, -86, -111]
from this code
std::cout << mat32sc1; channels[1] = mat32sc1 / 256; channels[0] = mat32sc1 - channels[1] * 256; std::cout << channels[1]; std::cout << channels[0];
I would expect 11233/256 to be 43 using integer division?
Is my assumption that C ++ always does integer gender division?
Update
Here is my current encoding function.
void encode(cv::Mat & src, cv::Mat & dst) { cv::Mat_<int> mat32sc1; src.convertTo(mat32sc1, CV_32SC1, 10, 11000); std::vector<cv::Mat> channels; channels.resize(3); // bitwise_and(mat32sc1, cv::Scalar(255), channels[0]); // is this needed or will converTo truncate automaticly. // channels[0].convertTo(channels[0], CV_8UC1); // mat32sc1.convertTo(channels[1], CV_8UC1, 1.0 / (1 << 8)); channels[2] = cv::Mat::zeros(src.rows, src.cols, CV_8UC1); int flag = 256; // std::cout << mat32sc1; channels[1] = mat32sc1 / flag; channels[0] = mat32sc1 - channels[1] * flag; cv::Mat_<int> off = (channels[0] < 0) / 255; //std::cout << off; channels[1] -= off; channels[0] = mat32sc1 - channels[1] * flag; //std::cout << channels[1]; //std::cout << channels[0]; channels[0].convertTo(channels[0], CV_8UC1); channels[1].convertTo(channels[1], CV_8UC1); cv::merge(channels, dst); }
Any smarter way to get the same result
source share