- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我注意到使用 convertTo 将矩阵从 32 位转换为 16 位“舍入”数字到上限。因此,源矩阵中大于 0x0000FFFF 的值将在目标矩阵中设置为 0xFFFF。
我的应用程序想要的是屏蔽值,在目标中仅设置值的 2 LSB。
这是一个例子:
Mat mat32;
Mat mat16;
mat32 = Mat(2,2,CV_32SC1);
for(int y = 0; y < 2; y++)
for(int x = 0; x < 2; x++)
mat32.at<unsigned int>(cv::Point(x,y)) = 0x0000FFFE + (y*2+x);
mat32.convertTo(mat16, CV_16UC1);
矩阵具有这些值:
32 bits matrix:
0000FFFE 0000FFFF
00010000 00010001
16 bits matrix:
0000FFFE 0000FFFF
0000FFFF 0000FFFF
在我想要的16位矩阵的第二行
00000000 00000001
我可以通过逐值扫描源矩阵并屏蔽值来做到这一点,但性能很低。
是否有执行此操作的 OpenCV 函数?
谢谢大家!
混合
最佳答案
这是可以做到的,但这需要一些肮脏的技巧,所以是否使用这种方法取决于你。所以这是可以做到的:
对于此示例,让我们创建 1000x1000 32 位矩阵并将其所有值设置为 65541 (=256*256+5)。因此,在转换之后,我们希望得到一个由五组成的矩阵。
Mat M1(1000, 1000, CV_32S, Scalar(65541));
这里是技巧:
Mat M2(1000, 1000, CV_16SC2, M1.data);
我们在与 M1 相同的内存缓冲区上创建了矩阵 M2,但 M2“认为”这是一个 2 channel 16 位图像的缓冲区。现在要做的最后一件事是将您需要的 channel 复制到您需要的地方。这可以通过 split() 或 mixChannels() 函数来完成。例如:
Mat M3(1000, 1000, CV_16S);
int fromto[] = {0,0};
Mat inpu[] = {M2}, outpu[] = {M3};
mixChannels(inpu, 1, outpu, 1, fromto, 1);
cout << M3.at<short>(10,10) << endl;
是的,我知道 mixChannels 的格式看起来很奇怪并且使代码的可读性更差,但它确实有效......如果你更喜欢 split() 函数:
vector<Mat> v;
split(M2,v);
cout << v[0].at<short>(10,10) << " " << v[1].at<short>(10,10) << endl;
关于OpenCV 2.4.7 Mat::convertTo() 32 位到 16 位截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21160034/
我有一个简单的对象,其中 1 个参数是对象的 ArrayList。我正在使用 ConvertTo-Json 将其输出到 Json。但是,即使我设置了 -Depth 1000,我仍然会看到数据被截断。
我正在运行以下PowerShell代码,我需要保持原始哈希表键的顺序。 function New-GetServiceConnectionTask( $serviceConnectionId) {
我正在尝试将文本文件转换为 JSON 格式的字符串,但双引号的位置不正确。 我的 file.txt 包含以下结构化信息(开头还有两个空行): adapter_name : empt
运行以下命令: Get-Process | Select-Object Id,ProcessName,CPU,StartTime | ConvertTo-Json 生成的JSON将StartTime显
要使用 REST API,我必须传递一个如下所示的 JSON 对象: { "series" : [{ "metric": "custom.powershell.gauge",
如果嵌套太深,看起来Powershell在导出为JSON时会切断数据。我的对象层次结构如下所示: Main Object Metadata More Metadata Coll
我正在尝试创建一个 JSON 序列化数组。当该数组只包含一个项目时,我得到一个字符串,而不是一个字符串数组(在 JSON 中)。 多个项目(按预期工作): PS C:\> @("one", "two"
我在使用 ConvertTo-Json 时遇到问题,并试图了解其行为和/或我做错了什么。 考虑以下命令序列: $val=@{ID=10;Config=@{ID=11;Config=@{ID=12;Co
我正在使用下面的命令来生成下面的输出 $VMHost | ConvertTo-json | Out-File -encoding "UTF8" -FilePath ".\$VMHostName.re
运行这段代码 get-service | Select-Object -Property displayname, status, name | convertTo-Json 结果例如在这样的输出中:
This question already has an answer here: Powershell ConvertTo-JSON missing nested level (1个答案) 1年前关
在贡献者@ mklement0和@Theo的帮助下,通过在Powershell ConvertTo-Json problem with double-quotation marks这个问题中解释的解决
我在从远程服务器上的 XML 文件创建凭据对象时遇到问题。这是我用来测试的代码 XML 文件 Selected.System.Management.Automati
我正在使用 ConvertTo-Csv 获取逗号分隔的输出 get-process | convertto-csv -NoTypeInformation -Delimiter "," 它的输出如下:
您好,我在3.4版中使用opencv,并且想要读取图像(* .pgm),然后将其转换为CV_32SC1。因此,我使用以下代码(部分): img = imread(f, CV_LOAD_IMAGE_GR
我想将UMat转换为其他类型。 我已经尝试过使用UMat方法convertTo,但出现以下错误: AttributeError: 'cv2.UMat' object has no attribute
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我将灰度模式的图像加载到 Mat image 中.我用 image.convertTo(image, CV_32F);将数据类型转换为 double 。我想将图像转换成 vector ,所以我按以下方
我正在尝试将我的矩阵转换为 CV_32FC1 以训练我的 SVM。我总是收到错误消息: OpenCV Error: Assertion failed (func != 0) in convertTo,
我知道这个问题已经被其他人问过并回答过。但我仍然无法解决我的问题。我从视频中读取了一个帧,其格式为 unsigned char (CV_8U)。我希望将其转换为 double (CV_64F)。我做如
我是一名优秀的程序员,十分优秀!