こういうのは自前で持っていないと面倒なことが多いので、宅の暇な時間に、OpenCVのMat用に書いてみました。
画像処理ではReinhardらのColor Transfer between imagesで使われています。
http://dl.acm.org/citation.cfm?id=618848
以下、c++コード
void BGR2LSM(cv::Mat bgr, cv::Mat& lsm){ double trans[] = { 0.0402, 0.5783, 0.3811, 0.0782, 0.7244, 0.1967, 0.8444, 0.1288, 0.0241}; lsm = cv::Mat::zeros(bgr.size(),CV_32FC3); for(int i=0;i<bgr.size().height;i++){ for(int j=0;j<bgr.size().width;j++){ for(int k=0;k<3;k++){ double t = 0; for(int l=0;l<3;l++){ t += trans[k*3+l]*(double)bgr.at<cv::Vec3b>(i,j)[l]; } lsm.at<cv::Vec3f>(i,j)[k] = t; } } } }
No comments:
Post a Comment