如何在范围为[0,1]的矩阵中切换元素
How to toggle elements in a matrix with range[0,1]?
我有这个矩阵
0 1 0
1 0 1
0 1 0
我想把每个1值的元素都改为0,反之亦然
1 0 1
0 1 0
1 0 1
如果我使用位补算符,也就是dst = ~src
,我得到了这个结果
255 254 255
254 255 254
255 254 255
当然,我可以通过一些算术和循环得到我想要的结果。但是有什么简单的方法来实现我想在OpenCV矩阵吗?谢谢。
更新:
下面是代码片段:#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
int main()
{
cv::Mat a = (cv::Mat_<uchar>(3,3) << 0, 1, 0,
1, 0, 1,
0, 1, 0 );
cv::Mat b = ~a;
std::cout << b << std::endl;
return 0;
}
如果您只有ones
和zeros
,您可以这样做:
cv::Mat b = 1 - a;
还有一个选项是
dst = 1 - src;
但是如果你的数组中有不属于[1,0]的内容,这将会失败
试试这个:
dst = src ? 0 : 1;
这将隐式地将src
值转换为bool
。
注意,1
以外的任何src
值也将使用该语句设置为0
。
这是另一个解决方案
dst = !src
输入
相关文章:
- 使用std::transform将一个范围的元素添加到另一个范围中
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++基于范围的 for 循环和元素副本
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 如何读/写或遍历 std::array 中的特定元素范围?
- 基于相邻元素 c++ 的分段误差范围的循环
- 是否存在一个范围::视图::group_by对应项,它将所有元素都考虑在内,而不是只考虑连续的元素
- 对于多个查询,查找在 l 到 r 范围内具有相同元素的最长公共子数组
- 我应该如何使用remove_if删除两个数字范围内的元素
- 从给定范围内的向量中查找最大元素
- 忽略元素的基于范围的 for 循环
- 包含每个 k 个列表中至少 1 个元素的最小元素范围的时间复杂度
- 矢量擦除范围内的元素
- 使用std :: lower_bound()打印元素范围以下某些值以下
- 迭代向量中属性具有特定值的元素范围
- 编辑2d数组中的元素范围
- 将元素范围从字符数组提取到字符串中
- 在C++中以相同的方式同时对两个元素范围进行分区
- 如何使用存储在列表中的特定元素范围初始化向量
- 对元素范围从0到9999的数组进行排序