小编iva*_*eev的帖子

使用PyOpenCL在OpenCL中快速2d直方图

我试图在HSV图像上用Python做二维直方图,但即使使用numpy和opencv也不够快(我实际上是用视频做的,但是考虑每个帧只是一个图像).

我正在寻找最饱和的Hue值.目前我有以下代码,它可以正常工作,但速度太慢了.

hist, xbins, ybins = np.histogram2d(hsv_channels[0].ravel(), saturation_channel.ravel(), [180,256],[[0,180],[0,256]])
Run Code Online (Sandbox Code Playgroud)

希望用PyOpenCL代替它,并将计算推送到GPU,但除了OpenCL中的hello world程序之外.我发现了一些关于这样做的文章,但我不确定从哪里开始.

我该如何开始这个?

编辑:

我已经考虑过这个了.我认为我想要做的GPU步骤大致如下:

  1. 将图像转换为1d阵列(如果是10x10,则变为100长阵列)
  2. 将图像上传到GPU
  3. 将图像分割成n个切片以进行处理,其中n是并行计算单元的数量.或者每个都可以引用此阵列上的特定范围.
  4. (Map)对于每个计算单元,分配180个"箱",每个箱可以包含256个其他箱.每个最里面的内容只是一个用于计数的整数.
  5. 对于每个色调(180个分档中的一个),计算每个饱和度级别(其他256个分档)的色调数量.对可以计数的数组的子部分执行此操作.
  6. 创建一个新的空箱.
  7. (Reduce)对于所有这些bin计数,然后将它们合并在一起(添加值).我不确定是否需要等到它们全部完成,或者只是按顺序将它们与上面的空箱合并.
  8. (确定最终答案)对于最后一组箱,循环它们并找到该色调的最大饱和度值,并存储它.现在找到具有最大饱和度的色调.作为最终答案,返回此色调#和此最大饱和度#.

尽管如此,我还是对PyOpenCL(或整个OpenCL)的GPU事情了解不够.

python performance opencv numpy opencl

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

CreateWindowExA将常规字符串解释为Unicode,在标题中显示中文字符

现在,我知道在微软的无限智慧中,他们错误地命名了一切.在Visual Studio中,设置Unicode表示UTF-16,而多字节字符是Microsoft所称的ANSI,它根本不是ANSI,而是Windows代码页1251.

无论如何,在WinAPI中有宏函数调用不同的函数,A或W版本取决于是否定义了Unicode.每个人都建议使用Unicode创建代码.所以我将我的设置设置为Unicode,因此编译器在任何字符串文字之前需要字母L,或者LPWSTR而不是LPSTR.问题是(这不是一个大问题),但在UTF-16中,每个字符都是两个或四个字节,每个字节大多是两个字节.我只打算主要使用ASCII字符,所以即使设置了Unicode,我实际上也会调用A版本的函数.

现在,我的印象是这无关紧要,因为ASCII在所有代码页和所有Unicode编码中都是通用的,即UTF-8,UTF-16,UTF-32,甚至是旧的代码,ASCII很漂亮非常普遍,前127个字符,或至少罗马字母和阿拉伯数字只是不要改变.

所以我的问题是,输入"AAAAA"作为我的窗口标题为什么它会出现中文字符?那是五个As.所以我做了一些研究,发现A Unicode是0x0041,两个As是0x4141,两个字节.这就是结果.

在此输入图像描述

所以在某种程度上,我知道为什么会发生这种情况.UTF-8要好得多,因为它只是ASCII字符的一个字节,然后是较少使用的字符.但问题是,当我用MessageBoxA或其他任何东西写A时,它很好,它只是窗口标题来做这个奇怪的事情.

unicode winapi visual-c++

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

导入错误:无法导入名称 pyqtSignal?

问题背景:这是我之前的 PyQt 项目,我正在研究并尝试启动 GUI。我已经使用 Python 2.7 设置了一个 Anaconda 环境并使用了 PyQt4。错误是:-

File "gui/gui.py", line 26, in <module> from qtpy.QtCore import (Qt, QFileSystemWatcher, QSettings, pyqtSignal) ImportError: cannot import name pyqtSignal

代码 :-

enter #import qt
from qtpy import QtCore, QtWidgets, QtGui, PYQT4 #changed from PYQT5
from qtpy.QtCore import (Qt, QFileSystemWatcher, QSettings, pyqtSignal)
Run Code Online (Sandbox Code Playgroud)

即使在尽我所能尝试设置环境和其他方面之后,我也无法确定为什么仍然会弹出此错误。在 Mac 上尝试过,即使在 Ubuntu 上也会出现类似的错误。有谁知道如何解决这个问题?

python pyqt4 python-2.7 qtpy

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

当"全局","本地"和"非常本地"变量存在同名时,如何访问"本地"变量

int i = 1;
int main()
{
    int i = 2;
    {
        int i = 3;
        cout << ::i << endl;  //i want to print 2, neither 1 nor 3
    }
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想打印2.默认情况下,cout << i << endl; print 3和cout << :: i << endl; 打印1.

c++ scope

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

在C和C++中打印文件的十六进制数

我现在正在开发一个家庭项目,但在开始之前,我需要知道如何cout以十六进制格式打印文件内容(*.bin为例)?

我喜欢学习,然后一个好的教程也很好;-)

请记住,我需要在不使用外部应用程序的情况下开发它,因为这个家庭项目是为了更多地了解有关C++的十六进制操作以及我的知识的良好实践.

其他一些问题

  • 有没有办法用C做到这一点?
  • 如何将此值存储到变量中?

我已经在C++中找到了方法,但如何在C语言中实现它?

c++ file-io hex

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

int的二进制移位是不可能的

usigned int val = 1;
val <<= 30; 
cout << intToBin(val) << endl;

string intToBin(unsigned int val) {
    unsigned int k=1;
    string ret;
    while (k <= val) {
        if (k & val) {
            ret.insert(0,"1");
        } else {
            ret.insert(0,"0");
        }
        k <<= 1;
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

这将写1和30x 0,这是正常的.但我需要的是在最高位上有1,意思是在第一个位置 - 然后是31x零.但当我尝试val << = 31; 没有写,我不明白.你能帮我澄清一下吗?

谢谢

c++ bit-shift

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

将ISO 639-1转换为ISO 639-2

我需要采用ISO 639-1代码en-GB然后将其转换为ISO 639-2代码,例如eng

我查看了以下库,但没有找到在任何一个库中执行该转换的记录方法:

我错过了什么吗?也就是说-这些库中的任何一个都有可能吗?

python iso-639

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

如何从 .gz 存档中获取原始文件的名称?

我正在编写一个实用程序,它接受 .gz 存档并检查其内容是否已存在于指定文件夹中。如果不这样做,它将在那里提取存档。

我计划执行此操作的方法是一一读取 .gz 存档中文件的文件名,并检查我的目录中是否已存在此类文件。但据我了解,gzip 不可能做到这一点。

理想情况下,我正在寻找这样的东西:

archive = gzipfile.GzipFile(source)

    for i in archive.getmembers():
        if os.path.isfile(destination + sep + i.name) and overwrite:
        ...
Run Code Online (Sandbox Code Playgroud)

这可能吗?

python gzip

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

如何获得UnicodeDecodeError发生的位置?

如何获得UnicodeDecodeError发生位置的位置?我在这里找到了资料,并尝试在下面实现。但是我得到一个错误NameError: name 'err' is not defined

我已经在Internet上和StackOverflow上的所有位置进行了搜索,但是找不到任何提示来使用它。在python docs中,它说此特定异常具有start属性,因此它必须是可能的。

谢谢。

    data = buffer + data
    try:
        data = data.decode("utf-8")
    except UnicodeDecodeError:
        #identify where did the error occure?
        #chunk that piece off -> copy troubled piece into buffer and 
        #decode the good one -> then go back, receive the next chunk of 
        #data and concatenate it to the buffer.

        buffer = err.data[err.start:]
        data = data[0:err.start]
        data = data.decode("utf-8")
Run Code Online (Sandbox Code Playgroud)

python exception-handling exception python-3.x

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

循环遍历ndarray的所有元素

In [6]: a = np.array([[1,2,3,4],[5,6,7,8]])

In [7]: b = a

In [8]: a[0]
Out[8]: array([1, 2, 3, 4])

In [9]: a[0][0]
Out[9]: 1
Run Code Online (Sandbox Code Playgroud)

但是我想使用zip和循环a,b然后a[0][0]跟着,a[0][1]直到我到达a[1][3].

当我尝试以下内容时:

In [11]: for i,j in zip(a,b):
    ...:     print i[0][0]
    ...:     
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-11-8a9c71fab781> in <module>()
      1 for i,j in zip(a,b):
----> 2     print i[0][0]
      3 

IndexError: invalid index to scalar variable.
Run Code Online (Sandbox Code Playgroud)

我想获得a[0][0] = 1,随后a[0][1] = …

python for-loop numpy

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