1 预备知识
2 Image类的定义
Image类与Mat类类似,后者是新版本的,Image类访问像素更直接,可以Image类访问像素,然后转换为Mat类。
创建类
访问像素
Image和Mat转换
2 代码
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.CV.CvEnum;
using Emgu.Util;
namespace Lesson8
{
class Program
{
static void Main(string[] args)
{
#region 访问像素
/**********方法一:直接访问像素***************/
//Image<Bgr, byte> img = new Image<Bgr, byte>("cat.jpg");//Image 类似于新版本的Mat类,访问像素更方便,可以转为Mat类
//for (int i = 0; i < img.Rows; i++)
//{
// for (int j = 0; j < img.Cols; j++)
// {
// if (i == j)
// {
// img[i, j ]= new Bgr(0, 0, 225);
// }
// }
//}
//CvInvoke.Imshow("img", img);
//CvInvoke.WaitKey(0);
/**********方法二:通过data属性访问像素***************/
//Image<Bgr, byte> img = new Image<Bgr, byte>("cat.jpg");//Image 类似于新版本的Mat类,访问像素更方便,可以转为Mat类
//for (int i = 0; i < img.Rows; i++)
//{
// for (int j = 0; j < img.Cols; j++)
// {
// if (i == j)
// {
// img.Data[i, j, 0] = 0;
// img.Data[i, j, 1] = 255;
// img.Data[i, j, 2] = 0;
// }
// }
//}
//CvInvoke.Imshow("img", img);
//CvInvoke.WaitKey(0);
#endregion
#region 图像减色算法演示
//Image<Bgr, Byte> img = new Image<Bgr, Byte>("cat.jpg");
//byte reduceValue = 30; //减色系数(值越大输出颜色越少)
//for (int i = 0; i < img.Rows; i++) //遍历行数
//{
// for (int j = 0; j < img.Cols; j++) //遍历列数
// {
// img.Data[i, j, 0] = (byte)((byte)((byte)(img.Data[i, j, 0] / reduceValue) * reduceValue) + (byte)(reduceValue / 2)); //蓝色通道或灰度图像
// img.Data[i, j, 1] = (byte)((byte)((byte)(img.Data[i, j, 1] / reduceValue) * reduceValue) + (byte)(reduceValue / 2)); //绿色通道
// img.Data[i, j, 2] = (byte)((byte)((byte)(img.Data[i, j, 2] / reduceValue) * reduceValue) + (byte)(reduceValue / 2)); //红色通道
// }
//}
//CvInvoke.Imshow("img", img);
//CvInvoke.WaitKey(0);
#endregion
//雪花效果
Image<Bgr, byte> img = new Image<Bgr, byte>("cat.jpg");
int snowNum = 1000;
Random random = new Random();
for (int k = 0; k < snowNum; k++)
{
var i = random.Next() % img.Rows;
var j = random.Next() % img.Cols;
img.Data[i, j, 0] = 255; //蓝色通道
img.Data[i, j, 1] = 255; //绿色通道
img.Data[i, j, 2] = 255; //红色通道
}
CvInvoke.Imshow("img", img);
CvInvoke.WaitKey(0);
}
}
}