Skip to content

Instantly share code, notes, and snippets.

@Temptationx
Created February 9, 2015 21:27
Show Gist options
  • Save Temptationx/d9b3ab4eee7d401aa3c0 to your computer and use it in GitHub Desktop.
Save Temptationx/d9b3ab4eee7d401aa3c0 to your computer and use it in GitHub Desktop.
channel_mixer
struct ChannelMixerParameter
{
int output_channel;
double r;
double g;
double b;
};
void channel_mixer(const cv::Mat &src, cv::Mat &m, const ChannelMixerParameter &param)
{
assert(src.channels() == 4 || src.channels() == 3);
cv::Mat r(src.rows, src.cols, CV_8UC1), g(src.rows, src.cols, CV_8UC1), b(src.rows, src.cols, CV_8UC1);
cv::Mat channels[] = { b, g, r };
int from_to1[] = { 0, 0, 1, 1, 2, 2 };
cv::mixChannels(&src, 1, channels, 3, from_to1, 3);
cv::Mat r1, b1, g1;
r.convertTo(r1, CV_32FC1);
b.convertTo(b1, CV_32FC1);
g.convertTo(g1, CV_32FC1);
r1 *= param.r;
b1 *= param.b;
g1 *= param.g;
cv::Mat output_channel;
cv::Mat temp(r1 + g1 + b1);
temp.convertTo(output_channel, CV_8UC1);
for (size_t i = 0; i < 3; i++)
{
int a[] = {0, 0, 1, 1, 2, 2};
}
m = src.clone();
int from_to2[] = {0, param.output_channel};
cv::mixChannels(&output_channel, 1, &m, 1, from_to2, 1);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment