您的位置:首页 > 游戏 > 手游 > 【OpenCV 基础知识 11】计算通道像素值和

【OpenCV 基础知识 11】计算通道像素值和

2024/10/6 22:20:49 来源:https://blog.csdn.net/gust2013/article/details/139103868  浏览:    关键词:【OpenCV 基础知识 11】计算通道像素值和

cvSplit()函数将复制src的各个通道到图像dst0,dst1,dst2和dst3中。如果源图像少于4个通道的情况下,那么传递给cvSplit()的不必要的目标参数可设置为NULL

program cv_Sum;{$APPTYPE CONSOLE}
{$R *.res}usesSystem.SysUtils,ocv.highgui_c,ocv.core_c,ocv.core.types_c,ocv.imgproc_c,ocv.imgproc.types_c,uResourcePaths;const// filename = cResourceMedia + 'cat2.jpg';varimg: pIplImage;channels: array [0 .. 2] of pIplImage;BGRSum: Array [0 .. 2] of TCvScalar;i, total: Integer;begintry// 加载图像文件img := cvLoadImage(filename, 1);// 创建三个单通道图像,用于分离图像的蓝色、绿色和红色通道for i := 0 to 2 dochannels[i] := cvCreateImage(cvGetSize(img), 8, 1);// 将图像分离为三个通道cvSplit(img, channels[0], channels[1], channels[2]);// 计算每个通道的像素值之和for i := 0 to 2 doBGRSum[i] := cvSum(channels[i]);// 计算图像的总像素值total := img^.width * img^.height * 255;WriteLn('Color percentage of RGB(ex red 50%, green 25% and blue %25) in an image is');WriteLn('red:   ', BGRSum[2].val[0] / total * 100:2:2);WriteLn('green: ', BGRSum[1].val[0] / total * 100:2:2);WriteLn('blue:  ', BGRSum[0].val[0] / total * 100:2:2);readln;excepton E: Exception doWriteLn(E.ClassName, ': ', E.Message);end;end.
  • img^:这表示你正在访问一个指针所指向的结构体或记录的内容。在这里,img 是一个指向图像数据的指针。
  • img^.width:这是图像的宽度,以像素为单位。
  • img^.height:这是图像的高度,以像素为单位。
  • 255:这是灰度图像的每个像素的可能的最大灰度值。

因此,img^.width * img^.height * 255 就是图像中可能的最大灰度值的总数。在灰度图像中,每个像素的灰度值通常介于 0 到 255 之间,因此这个计算就得到了整个图像的所有可能灰度值的总数。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com