小编use*_*362的帖子

Anaconda python,PIL和imagingtk

虽然这是一个相当充分记录的问题,但我找不到解决方案.

我无法导入PIL和ImageTK.

最小的例子:

import Tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()
image = Image.open('live.ppm')
photo = ImageTk.PhotoImage(image)
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

File "C:\Anaconda\lib\site-packages\PIL\ImageTk.py", line 181, in paste
    import _imagingtk
ImportError: No module named _imagingtk
Run Code Online (Sandbox Code Playgroud)

我试过了:

conda install pillow
conda remove PIL
Run Code Online (Sandbox Code Playgroud)

但没有运气.

python tkinter python-imaging-library anaconda

8
推荐指数
1
解决办法
1万
查看次数

C++清除队列和线程安全

我有一个队列类,其数据存储在向量中:

std::vector<boost::shared_ptr<rxImage> > queue;
Run Code Online (Sandbox Code Playgroud)

有一个线程添加到基于此循环的队列:

while(runRxThread){
  this->rxImage();
}
Run Code Online (Sandbox Code Playgroud)

其中rxImage()的定义如下:

zmq::message_t img;
imageSocket->recv(&img);

//addToQueue is a push back:
//queue.push_back( boost::shared_ptr<rxImage> (new rxImage(data, imgSize)) );
localQueue->addToQueue((unsigned char*) img.data());
Run Code Online (Sandbox Code Playgroud)

这个图像在这个帖子中得到了很好的接收(我已经测试了10,000左右,看起来很好).

runRxThread变量是通过定义线程函数的类中的一些setter函数设置的.

当我在主线程中运行一个进程时,例如:

startRx(); //start the thread

/*process to stimulate the sending of network data from another program*/

stopRX(); //stop the thread from accessing the queue

queue.clear();
Run Code Online (Sandbox Code Playgroud)

由clear()引起的段错误.我已经检查过它肯定是这条线而不是对象的内部管道,它绝对是.

它似乎是一个线程安全问题,但我不知道如何解决它,更重要的是,我不知道为什么.我的理解是两个线程可以写入同一个内存,但不能同时写入.当然,通过设置我的runRxThread变量,我确保不会发生这种情况.

我非常想要一个不涉及互斥锁或信号量的解决方案 - 我真的不认为它们对于像这样的问题是必要的.

谢谢!

编辑:runRXThread是volatile并且线程循环现在是:

while(1){
    if(runRxThread == 1){
      this->rxImage();
    }
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:"在共享对象上使用互斥锁"

好吧,这显然是一个线程安全问题,我需要让我的共享变量线程安全.但...

1)rxImage(); 除非有数据发送,否则不会终止

2)段错误发生在rxImage()中;

3)如果我用互斥锁锁定队列,那么程序肯定会在rxImage中挂起,直到有数据,因为互斥锁不会被释放

4)没有数据发送,所以程序将永远挂起.

我的理解不正确吗?

EDIT3:

我已将rxImage()更改为非阻塞:

zmq::message_t img;
imageSocket->recv(&img,ZMQ_NOBLOCK); …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost boost-thread

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

Numpy最快的3D到2D投影

我有一个二进制数据的3D数组.我想把它投射到3个2D图像 - 侧面,正面,鸟眼.

我写了代码:

for x in range(data.shape[2]):
    for y in range(data.shape[0]):
        val = 0
        for z in range(data.shape[1]):
            if data[y][z][x] > 0:
                val = 255
                break
        side[y][x] = val
Run Code Online (Sandbox Code Playgroud)

但对于~700x300x300矩阵来说,这是非常缓慢的(75秒!).

实现此任务的最快方法是什么?

编辑:

为了保存图像,我使用了:

sideImage = Image.fromarray(side)
sideImage.convert('RGB').save("sideImage.png")
Run Code Online (Sandbox Code Playgroud)

python arrays optimization numpy

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

OpenCV python Bayer 转换错误

以下代码:

filePath = os.path.join(root,file)
image = cv2.imread(filePath)
convertedImage = cv2.cvtColor(image, cv2.COLOR_BAYER_GR2RGB)
Run Code Online (Sandbox Code Playgroud)

产生这个错误:

opencv\modules\imgproc\src\color.cpp:4196: error: (-215) scn == 1 && dcn == 3 in function cv::cvtColor
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思(除了说明源和目标中的通道数)?我怎样才能解决这个问题?是否与我加载图像的方式有关?

python opencv image image-processing

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