1 对比度亮度调整
2 通道的分离与合并
通道分离
通道合并
3 代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.Util;
using Emgu.CV.Util;
using Emgu.CV.CvEnum;
namespace Lesson10
{
class Program
{
static void Main(string[] args)
{
#region 内容一:调整对比度和亮度
//Image<Bgr, byte> img = new Image<Bgr, byte>("3.jpg");
//Image<Bgr, byte> img2 = img.Clone();
//int contrast = 200;
//int brightness = 0;
//for (int i = 0; i < img.Rows; i++)
////{
// for (int j = 0; j < img.Cols; j++)
// {
// int B = (int)(contrast * 0.01 * img.Data[i, j, 0] + brightness);
// int G = (int)(contrast * 0.01 * img.Data[i, j, 1] + brightness);
// int R = (int)(contrast * 0.01 * img.Data[i, j, 2] + brightness);
//防止数据溢出
// if (B > 255)
// B = 255;
// if (G > 255)
// G = 255;
// if (R > 255)
// R = 255;
// img.Data[i, j, 0] = (byte)B;
// img.Data[i, j, 1] = (byte)G;
// img.Data[i, j, 2] = (byte)R;
// }
//}
//CvInvoke.Imshow("img", img);
//CvInvoke.WaitKey(0);
#endregion
#region 内容二:通道分离与合并
Mat img = CvInvoke.Imread("3.jpg");
Mat[] Channels = img.Split();//通道分离,返回一个数组类型
// CvInvoke.Imshow("B", Channels[0]);
// CvInvoke.Imshow("G", Channels[1]);
// CvInvoke.Imshow("R", Channels[2]);
Mat dst = new Mat();
VectorOfMat vChannels = new VectorOfMat();
//二值化处理
CvInvoke.Threshold(Channels[0], Channels[0], 100, 255, ThresholdType.Binary);
CvInvoke.Threshold(Channels[1], Channels[1], 100, 255, ThresholdType.Binary);
CvInvoke.Threshold(Channels[2], Channels[2], 100, 255, ThresholdType.Binary);
vChannels.Push(Channels[0]);
vChannels.Push(Channels[1]);
vChannels.Push(Channels[2]);
CvInvoke.Merge(vChannels, dst);//通道合并
CvInvoke.Imshow("Merge", dst);
CvInvoke.Imshow("reult", img);
CvInvoke.WaitKey(0);
#endregion
}
}
}