我有一个来自CvType.CV_8UC4检测的代码片段,但我不知道colorblobdetection的用途。这里的Link并没有真正解释它是如何工作的。
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat(height, width, CvType.CV_8UC4);
mDetector = new ColorBlobDetector();
mSpectrum = new Mat();
mBlobColorRgba = new Scalar(255);
mBlobColorHsv = new Scalar(255);
SPECTRUM_SIZE = new Size(200, 64);
CONTOUR_COLOR = new Scalar(255,0,0,255);
}
发布于 2016-09-17 14:34:42
OpenCV类型可以读取如下内容:
CV_
8U
:Unsigned int 8-bitC4
:Four channels。因此,mRgba = new Mat(height, width, CvType.CV_8UC4);
会创建一个具有四个颜色通道和介于0到255之间的值的矩阵。
发布于 2016-09-17 16:48:39
这就形成了一种特定形式的Matrix。其中,8u
表示每个元素都是无符号(仅为正)的8位整数。
有4个通道的原因(就像4个切片层叠在一起形成不同颜色的图像)是为了组成图像。其中的前3个是R、G、B,最后一个是Alpha,它是一个介于0和1之间的值,表示透明度。当这些切片组合在一起时,你就得到了正确的颜色组合。
发布于 2021-02-09 23:57:14
另外,所有答案都是正确的:第四个通道并不是在每种情况下都是alpha/透明度信息。有时,如果进入缓冲区是具有填充字节的24位彩色图像(大多数在前端或末端),则使用它,以便可以原子地(仅通过地址)寻址特定的像素,而无需找到特定的字节偏移量。例如,QImage将jpegs加载为32位图像,而4个字节中只有3个是相关的。
因此,CV_8UC4可以直接用于此目的。顺便说一句,没有使用将RGB转换为有点像HSV的方法,所有通道都是单独处理的,因此:
如果在接下来的处理步骤中有许多繁重的cv操作,那么将其重新格式化为3bpp图像可能是一个好主意。这可以减少大约25%的处理时间,因为丢失了无用的第四个通道。
https://stackoverflow.com/questions/39543580
复制相似问题