智能建站系统免费版,石家庄住房城乡建设厅网站,全球最顶尖的设计公司,广州模板网站建设目录
像素
1、确定像素位置
2、获取像素的BGR值
3、修改像素的BGR值 像素 图像数字化是指用数字表示图像#xff0c;每一幅数字图像都是有M行N列的像素组成的#xff0c;其中每一个像素都存储一个像素值。计算机通常会把像素值处理为256个灰度级别#xff0c;这256个灰…目录
像素
1、确定像素位置
2、获取像素的BGR值
3、修改像素的BGR值 像素 图像数字化是指用数字表示图像每一幅数字图像都是有M行N列的像素组成的其中每一个像素都存储一个像素值。计算机通常会把像素值处理为256个灰度级别这256个灰度级别分别用区间[0,255]中的数值表示其中“0”表示纯黑色“255”表示纯白色。 像素是构成数字图像的基本单位如下图是一副花朵的图像。 放大图像中蓝色框区域形成如下的放大图像。 不难发现放大后的图像是由许多个小方块组成的通常把一个小方块称作一个像素。因此一个像素是具有一定面积的一个块而不是一个点。需要注意的是像素的形状是不固定的大多数情况下像素被认为是方块的但是有的时候也可能是圆形或其他形状。
1、确定像素位置
图像的水平方向和垂直方向 在Windows系统的画图工具中 打开测试图片得到如下界面在这个界面中我们可以看到在水平方向上的像素个数是590在垂直方向上的像素个数是600。 根据水平方向和垂直方向上的像素个数我们绘制如下图的坐标系。 上图中在水平方向上的像素个数是590个与其对应的是X轴的取值范围即0~589同理在垂直方向上的像素个数是600个与其对应的Y轴的取值范围即0~599。
这样就可以通过坐标来确定某个像素在图像中的位置。在OpenCV中某个像素的坐标方式是(y,x)如上图右下角的像素坐标是(599,589)。
2、获取像素的BGR值
代码 Mat mat Cv2.ImRead(test.jpg); Vec3b px mat.AtVec3b(599, 589); Console.WriteLine(坐标(599, 589)像素的BGR值是 px); Console.ReadKey(); 输出 坐标(599, 589)像素的BGR值是Vec3b (35, 155, 131) 人眼能够感知红色、绿色、蓝色这三种不同的颜色因此把这三种颜色称作三基色。如果将这三种颜色以不同的比例进行混合人眼就能看见丰富多彩的颜色。
对于计算机如何对这些颜色进行编码呢答案是利用色彩空间。也就是说色彩空间是计算机对颜色进行编码的模型。
以常用的RGB色彩空间为例在RGB色彩空间中存在3个通道即R通道、G通道、B通道。其中R通道是指红色Red通道G通道是指绿色Green通道B通道是指蓝色Blue通道并且每个色彩通道都在区间[0,255]内取值。 OpenCV对图像的通道顺序进行了转换即把RGB图像的通道顺序转换为BGR。 分别获取(599, 589)像素的B通道、G通道、R通道的值。
代码 Mat mat Cv2.ImRead(test.jpg); Vec3b pixelValue mat.AtVec3b(599, 589); Console.WriteLine(Pixel value at (599, 589): B {0}, G {1}, R {2}, pixelValue.Item0, pixelValue.Item1, pixelValue.Item2); Console.ReadKey(); 输出 Pixel value at (599, 589): B 35, G 155, R 131 3、修改像素的BGR值
上面我们读取了坐标(599, 589)上像素的BGR值即35,155,131。现在将像素的BGR值由原来的35,155,131修改为255,255,255代码如下: Mat mat Cv2.ImRead(test.jpg); Vec3b pixelValue mat.AtVec3b(599, 589); // 修改像素值 pixelValue[0] 255; // 修改蓝色通道 pixelValue[1] 255; // 修改绿色通道 pixelValue[2] 255; // 修改红色通道 mat.AtVec3b(599,589) pixelValue; Vec3b new_pixelValue mat.AtVec3b(599, 589); Console.WriteLine(New pixel value at (599, 589): B {0}, G {1}, R {2}, new_pixelValue.Item0, new_pixelValue.Item1, new_pixelValue.Item2); Console.ReadKey(); 输出 New pixel value at (599, 589): B 255, G 255, R 255 对于BGR图像当每个像素的B、G、R数值相等时就可以得到灰度图像。其中BGR0为纯黑色RGB255为纯白色。 实例 修改指定区域的所有像素值为白色
代码 Mat mat Cv2.ImRead(test.jpg); for (int i 0; i 100; i) { for (int j 0; j 100; j) { mat.AtVec3b(i, j) new Vec3b(255, 255, 255);//修改为白色 } } Cv2.ImShow(test.jpg, mat); Cv2.WaitKey(); Cv2.DestroyAllWindows(); 效果 左上角区域都为白色