OpenCV:填写 CV::MAT 的不同方法
opencv: different ways to fill a cv::mat
我知道对于填充cv::Mat
有一个很好的cv::Mat::setTo
方法,但我不明白为什么我对这些代码段没有相同的效果:
// build the mat
m = cv::Mat::zeros(size, CV_8UC3);
cv::cvtColor(m, m, CV_BGR2BGRA); // add alpha channel
/////////////////////////////////////////////////////////// this works
m.setTo( cv::Scalar(0,144,0,55) );
m = cv::Mat::zeros(size, CV_8UC3);
cv::cvtColor(m, m, CV_BGR2BGRA);
/////////////////////////////////////////////////////////// this does NOT work
m = m + cv::Scalar(0,144,0,55)
m = cv::Mat::ones(size, CV_8UC3);
cv::cvtColor(m, m, CV_BGR2BGRA);
/////////////////////////////////////////////////////////// this does NOT work
m = m.mul( cv::Scalar(0,144,0,55) );
m = cv::Mat::zeros(size, CV_8UC3);
cv::cvtColor(m, m, CV_BGR2BGRA);
/////////////////////////////////////////////////////////// this works too!
cv::rectangle(tracks,
cv::Rect(0, 0, tracks.cols, tracks.rows),
cv::Scalar(0,144,0,55),
-1);
PS:我将这些垫子显示为OpenGL alpha纹理
我想"不起作用"意味着输出与使用 setTo 不同?
- 当用
cv::cvtColor
变换时,α通道被初始化为255。如果你添加或乘以任何东西,它将保持在 255。 - 为什么在创建垫子时使用
cv::cvtColor
进行转换,而不是仅使用CV_8UC4
? - 不能将
cv::Mat::ones
用于多通道初始化。使用cv::Mat::ones
时,只有第一个通道设置为 1。使用cv::Mat( x, y, CV_8UC3, CV_RGB(1,1,1) )
.
对于 aplha 通道,您需要使用 CV_8UC4
,而不是 CV_8UC3
。
相关文章:
- 有没有更好的方法来命名管道`cv :: mat`变量
- OpenCv,将 4x4 cv::Mat 乘以 cv::P oint3f 的最佳方法是什么
- 一个人如何将腋窝VEC/MAT作为REF论点传递给另一种方法
- 如何在不显式指定 OpenCV C++ 中 Mat 类型的情况下为不同的矩阵类型编写方法
- 通过套接字将OpenCV Mat从PC发送到Android的最快方法
- 将 Mat 参数从 Python 传递给 c++ 方法
- 重写 cv::Mat 数据的最佳方法
- 创建一个cv::Mat的小列表并对其进行迭代的正确方法是什么
- 在OpenCV中循环通过16位Mat的像素的有效方法
- mat类opencv中的begin()方法声明
- OpenCV:填写 CV::MAT 的不同方法
- 将 cv::Mat 向量复制到浮点数向量的最佳方法是什么?
- 在不复制数据的情况下将OpenCV Mat发送到MATLAB工作区的方法
- 是否使用IplImage执行与Mat.covertTo相同的方法?OpenCV
- 分配cv::Mat对象的最通用方法是什么?
- 在OpenCv Mat中箝位值的最有效方法
- 由Mat.clone()在onCameraFrame方法中抛出的OutOfMemoryError错误
- cv::Mat的发布方法
- 将cv::Scalar的值设置为opencv中cv::Mat中的一个像素的正确(最佳)方法是什么?
- 调整cv::Mat大小的最有效方法