从两个 cv::垫子和一个掩码构建 cv::垫子
Construct cv::Mat from two cv::Mat's and a mask
我有两个(相同的大小,相同的类型),cv:Mat
让我们称它们为A,B。我还有另一个cv::Mat
是掩码(0 和 1 值或其他什么,0 和 255 也适用),让我们称之为 M。
我需要构造一个新的cv::Mat
(C),它具有与 A 和 B 相同类型和大小。C cv::Mat
的值如下所示:
C(x,y) = A(x,y) if M(x,y)==1
C(x,y) = B(x,y) if M(x,y)==0
我现在正在做的简单解决方案是遍历 M 并分支其值并将正确的值分配给 C。但是,有没有更好的方法?准备好并从OpenCV中优化一个了吗?
我建议你分两步完成:
cv::Mat C(A.rows, A.cols, A.type());
// copy A in C where M != 0
A.copyTo(C, M);
// copy B in C where M == 0
B.copyTo(C, 255 - M);
编辑:
米卡有没有指出更好的性能
// start from B
cv::Mat C = B.clone();
// copy B in C where M == 0
A.copyTo(C, M);
相关文章:
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- cv::String 和 std::string:何时使用哪一个以及必须同时使用两者?
- 在另一个分配的矩阵中为特定范围创建 cv::Mat 标头
- 在qpixMap中显示一个CV :: MAT(键入CV_32F)
- 是否可以拥有一个cv ::垫子,其中包含标量而不是标量的指针
- 在标头中定义 cv::Mat 后跟另一个 Mat 可避免多个通道
- 如何在C++中声明一个定义为func(cv::Mat &img)的函数
- 将cv::Mat A的每个成员与cv::Mat B合并,以创建一个cv::Mat C,结果为[A(x,y),B(x,y)
- 创建一个cv::Mat的小列表并对其进行迭代的正确方法是什么
- 使用 Emgu CV C++声明一个新点
- 从 Python 调用 C++ opencv 函数(发送一个 cv :: mat 到 C++ 使用 opencv 的 d
- 从两个 cv::垫子和一个掩码构建 cv::垫子
- 为什么cv::Mat::data总是指向一个uchar
- CV::VideoCapture::open()中的一个错误
- 需要一个更快的方式来转换cv::Mat成一维矢量形式
- 你如何获得 cv::keypoint 的 x&y 坐标和大小?我总是得到一个段错误
- 将cv::Scalar的值设置为opencv中cv::Mat中的一个像素的正确(最佳)方法是什么?
- 用整数除法将cv::Mat除以一个数字
- 如何用cv::Mat创建一个16位视频
- 将 cv::Mat 复制到另一个会创建"assertion failed 0 <= _colRange.start && .."