小编bla*_*ack的帖子

OpenCV项目3D坐标到2d摄像机坐标

我有一个物体的3D世界坐标,我想在相机2D平面上得到它的坐标.我已经使用了相机校准cv::calibrateCamera,因此我有相机矩阵distortionCoeffs.

为了将3D点投影到2D摄像机坐标,我使用cv::projectPoints.文件说:

void projectPoints(InputArray objectPoints,InputArray rvec,InputArray tvec,InputArray cameraMatrix,InputArray distCoeffs,OutputArray imagePoints,OutputArray jacobian = noArray(),double aspectRatio = 0)

我如何获得rvec/tvec并且我的方法是正确的?calibrateCamera给我rvecstvecs,但他们每个输入棋盘的图像,我想,他们是相机的旋转和棋盘的翻译,而不是.

c++ 3d camera opencv

5
推荐指数
1
解决办法
3764
查看次数

python3用单反斜杠替换双反斜杠

我需要在复杂的字符串\\中用\python3 替换.我知道这个问题已被多次询问过,但大部分时间都是针对简单的字符串,所以(接受的)答案都不适用于复杂的字符串.

这也是不同的,从这个地方的问题可以用来解决.decode('unicode_escape')这对于这个问题无法正常工作.见下文.

假设字符串是:

my_str = '\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z\\x'
Run Code Online (Sandbox Code Playgroud)

直接的方法是:

my_str.replace('\\','\')
Run Code Online (Sandbox Code Playgroud)

这导致:

SyntaxError:扫描字符串文字时的EOL


这个答案建议使用:

my_str.replace('\\\\','\\')
Run Code Online (Sandbox Code Playgroud)

结果如下:

'\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z\\x'
Run Code Online (Sandbox Code Playgroud)

所以,没有变化.


这个答案表明:

b = bytes(my_str, encoding='utf-8')
b.decode('unicode-escape')
Run Code Online (Sandbox Code Playgroud)

但是这对于这样一个复杂的字符串不起作用:

UnicodeDecodeError:'unicodeescape'编解码器无法解码位置49-50中的字节:截断\ xXX转义


使用解码(如此处所示)会导致:

my_str.decode('unicode_escape')
Run Code Online (Sandbox Code Playgroud)

AttributeError:'my_str'对象没有属性'decode'


编码和解码的组合使用unicode_esacpe返回一个完全不同的字符串(可能是由于使用utf-16,但utf-8导致错误,见上文.另外,例如latin1,不起作用):

my_str.encode('utf-16').decode('unicode_escape')
'ÿþ\\\x00x\x00a\x005\x00\\\x00x\x00c\x000\x00\\\x00x\x00e\x006\x00a\x00K\x00\\\x00x\x00f\x009\x00\\\x00x\x008\x000\x00\\\x00x\x00b\x001\x00\\\x00x\x00c\x008\x00*\x00\x01\x00\x12\x00$\x00\\\x00x\x00f\x00b\x00p\x00\x1e\x00(\x004\x00\\\x00x\x00d\x006\x00{\x00;\x00Z\x00\\\x00x\x00'
Run Code Online (Sandbox Code Playgroud)

python string replace python-3.x

5
推荐指数
1
解决办法
1682
查看次数

Visual Studio 2015:增加进程内存

当我在Visual Studio 2015中运行我的应用程序时,我在诊断工具中看到进程内存已达到2GB - 就好像有一个限制:

诊断

我读过,执行是为了x32限制可用内存,所以必须使用x64.所以我构建relase, x64了上面显示的结果.如何删除此"限制"?

注意:我有16GB Ram硬件(操作系统:Windows 10).

c++ memory resources visual-studio-2015

3
推荐指数
1
解决办法
8252
查看次数

C++多线程互斥锁"重置"

std::mutex在我的多线程应用程序中使用a 来通过多个线程访问相同的资源.这很好用.但在我的代码的某些时候,我必须使用终止线程TerminateThread(...).当我再次开始线程(使用_beginthreadex)时,如果其中一个线程在终止时处于互斥锁定状态,则会出现异常:

并发:: improper_lock bei Speicherort 0x03B4F3D0.

这是在rtlocks.cpp,第1184行(in bool critical_section::_Acquire_lock)中抛出的:

LockQueueNode * pPrevious = reinterpret_cast<LockQueueNode *>(InterlockedExchangePointer(&_M_pTail, pNewNode));
Run Code Online (Sandbox Code Playgroud)

我想,如果我可以"重置"互斥锁,我会得到一个例外,对吗?我怎样才能做到这一点?

(我用<process.h>)

编辑

我尝试了以下方法:

std::mutex dataStorage_lock;
mutexHandler[0] = &dataStorage_lock; //storing all mutexs in an array

//when trying to delete:
delete mutexHandler[0];
Run Code Online (Sandbox Code Playgroud)

但我得到:

调试断言失败!

表达式:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)

c++ multithreading mutex

2
推荐指数
1
解决办法
597
查看次数

在 Python3 中将字节转换为字符串并正确返回?

给定一个随机字节(即不仅是数字/字符!),我需要将其转换为字符串,然后不丢失信息的情况下返回初始字节。这似乎是一项基本任务,但我遇到了以下问题:

假设:

rnd_bytes = b'w\x12\x96\xb8'
len(rnd_bytes)
Run Code Online (Sandbox Code Playgroud)

印刷: 4

现在,将其转换为字符串。注意:我需要设置backslashreplace,否则它会返回“UnicodeDecodeError”,否则会丢失将其设置为另一个标志值的信息。

my_str = rnd_bytes.decode('utf-8' , 'backslashreplace')
Run Code Online (Sandbox Code Playgroud)

现在,我有了字符串。我想将它转换回原来的字节(大小为 4!):

根据 python 资源和这个答案,有不同的可能性:

conv_bytes = bytes(my_str, 'utf-8')
conv_bytes = my_str.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

但是 len(conv_bytes) 返回10.

我试着分析结果:

>>> repr(rnd_bytes)
"b'w\\x12\\x96\\xb8'"
>>> repr(my_str)
"'w\\x12\\\\x96\\\\xb8'"
>>> repr(conv_bytes)
"b'w\\x12\\\\x96\\\\xb8'"
Run Code Online (Sandbox Code Playgroud)

更换'\\\\'. my_str.replace('\\\\','\\')不会改变任何东西。可能是因为四个反斜杠只代表两个。所以,my_str.replace('\\','\')会找到'\\\\',但是会导致

语法错误:扫描字符串文字时 EOL

由于最后一个论点'\'。这已经在这里讨论,其中提出了以下建议:

>>> my_str2=my_str.encode('utf_8').decode('unicode_escape')
>>> repr(my_str2)
"'w\\x12\\x96¸'"
Run Code Online (Sandbox Code Playgroud)

这取代了'\\\\'但似乎添加/更改了一些其他字符:

>>> conv_bytes2 = …
Run Code Online (Sandbox Code Playgroud)

byte type-conversion python-3.x

2
推荐指数
1
解决办法
2940
查看次数

systemd无法在raspbian python3上安装

我想安装systemdgithub)库。

但是,执行

sudo pip3 install systemd
Run Code Online (Sandbox Code Playgroud)

导致此错误:

命令“ /usr/local/bin/python3.6 -u -c”导入setuptools,标记化;file ='/ tmp / pip-install-c97m6cn0 / systemd / setup.py'; f = getattr(tokenize,'open',open)(file); code = f.read()。replace('\ r \ n ','\ n'); f.close(); exec(compile(code,file,'exec')))“ install --record /tmp/pip-record-gqnrg4wd/install-record.txt --single-版本外部管理的--compile“在/ tmp / pip-install-c97m6cn0 / systemd /中失败,错误代码为1

我试图升级setuptools,但这不能解决我的问题:

sudo pip3 install --upgrade setuptools
Run Code Online (Sandbox Code Playgroud)

这里是完整的控制台输出:

$ sudo pip3 install systemd Collecting systemd
使用缓存的 https://files.pythonhosted.org/packages/d4/c2/2195b049effd866b5d26926e672be83fc6f3263aa71ea0639e8eab44851e/systemd-0.16.1.tar.gz 为收集的软件包构建轮子:systemd为systemd运行setup.py bdist_wheel ...错误完整的输出结果命令/ usr / bin / python3 -u -c“导入setuptools,标记化;文件 ='/ tmp …

python pip python-3.x systemd raspbian

2
推荐指数
1
解决办法
931
查看次数

OpenCV 3.0包括跟踪器

我想使用OpenCV 3.0文档站点上描述的跟踪器.在OpenCV 2.x中,有必要重新编译OpenCV,包括contrib库.但正如在OpenCV 3文档中那样,我想我不必再重新编译它了,对吧?但是我在C++中有什么#include?

我试图这样做退出一段时间,但没有找到任何解决方案.谢谢!

编辑 谢谢!重新编译过程对我没有任何错误.我还有几个错误:他找不到'opencv_highgui300d.dll','opencv_imgcodecs300d.dll'和'opencv_core300d.dll'.

我解决了这个问题,因为我必须将'Path'系统变量更改为

...\cmake-output\vc12\x86\install\x86\vc12\bin

c++ opencv opencv3.0

0
推荐指数
1
解决办法
1628
查看次数

python生成固定大小(16字节)真实随机字符串

我想在python3中生成一个16字节长的随机字符串用于加密目的(AES加密)。urandom(n)似乎是获得真正随机字符的方法:

os.urandom(n):

返回适合加密使用的 n 个随机字节字符串。

由于我需要一个 16 字节的随机字符串,我认为这对我有用编辑我现在包含了一个更复杂的示例,演示了我遇到的问题。

from os import urandom
from Crypto.Cipher import AES
from base64 import b64encode
import sys

rnd=urandom(16)
rnd_bytes=b64encode(rnd).decode('utf-8')

print(sys.getsizeof(rnd_bytes))
print(len(rnd_bytes))
print(type(rnd_bytes))

AESencrypter=AES.new('my key',AES.MODE_CBC,rnd_bytes)
Run Code Online (Sandbox Code Playgroud)

注意:我使用此答案将 urandom字节转换为string。输出是:

73

24

文件“/User/test.py”,第 14 行,在 AESencrypter=AES.new('my kes',AES.MODE_CBC,rnd_bytes) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3. 6/site-packages/Crypto/Cipher/AES.py", line 95, in new return AESCipher(key, *args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3 .6/site-packages/Crypto/Cipher/AES.py”,第 59 行,在init blockalgo.BlockAlgo 中。init (self, _AES, key, *args, **kwargs) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/Crypto/Cipher/blockalgo.py”,行141、在init self._cipher = factory.new(key, *args, …

python random byte python-3.x

-1
推荐指数
1
解决办法
7010
查看次数