小编Jaz*_*azz的帖子

opencv.imshow会导致jupyter笔记本崩溃

我在谷歌或stackoverflow上检查其他问题,他们正在谈论在脚本中运行cv2.imshow,但我的代码在jupyter笔记本中运行.

这是我的配置:

  1. ubuntu 16.4x64

  2. python 3.5

  3. opencv 3.1.0

我启动了一个jupyter笔记本:这是我把它放在笔记本上的代码:

%pylab notebook
import cv2

cvim2disp = cv2.imread('data/home.jpg')
cv2.imshow('HelloWorld', cvim2disp)
cv2.waitKey() #image will not show until this is called
cv2.destroyWindow('HelloWorld') #make sure window closes cleanly
Run Code Online (Sandbox Code Playgroud)

当我执行这些代码.图像将显示在弹出窗口中,但是我无法通过单击右上角的x关闭此窗口,片刻之后,系统会提示我窗口没有响应,它会给我2个选择:等待","退出".如果我点击等待,那么它将在稍后显示相同的提示,如果我点击'fore quit',那么jupyter笔记本内核会死掉,我必须重新开始.

我谷歌周围,许多解决方案建议我应该添加此代码

cv2.startWindowThread()
Run Code Online (Sandbox Code Playgroud)

之前imshow,但情况变得更糟,内核永远挂起!任何人都知道发生了什么.

这是我的错误的图片: 在此输入图像描述

python ubuntu opencv jupyter-notebook

20
推荐指数
5
解决办法
2万
查看次数

将图像从CV_64F转换为CV_8U

我想使用OpenCV 将类型的图像转换CV_64FC1CV_8UC1Python.

在C++中,使用convertTo函数,我们可以使用以下代码片段轻松转换图像类型:

image.convertTo(image, CV_8UC1);
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索但无法找到任何没有错误的解决方案.Python OpenCV中的任何函数都可以转换它吗?

c++ python opencv numpy

10
推荐指数
2
解决办法
2万
查看次数

从直方图密度自动查找最佳图像阈值

我希望在显示器上执行光学字符识别(OCR),并希望程序在不同的光照条件下工作.为此,我需要处理和阈值图像,使每个数字周围没有噪声,允许我检测数字的轮廓并从那里执行OCR.我需要使用的阈值适应这些不同的光照条件.我尝试过自适应阈值处理,但我无法让它工作.

我的图像处理很简单:加载图像(i),灰度i(g),将直方图均衡应用于g(h),并将二进制阈值应用于阈值= t的h.我已经使用了几个不同的数据集,并发现使OCR工作的最佳阈值一致地位于(h)的直方图中的最高密度范围内(没有间隙的图的唯一部分).直方图(h). 值t = [190,220]对于OCR是最佳的

直方图(h).值t = [190,220]对于OCR是最佳的.可以在此处找到描述我的问题的更完整的图像集:http://imgur.com/a/wRgi7

我当前的解决方案,但有点笨拙和缓慢,检查:

    1. There must be 3 digits
    2. The first digit must be reasonably small in size
    3. There must be at least one contour recognized as a digit
    4. The digit must be recognized in the digit dictionary
Run Code Online (Sandbox Code Playgroud)

除非所有案例都被接受,否则阈值将增加10(从较低值开始)并再次尝试.

我可以识别(h)直方图上的最佳阈值这一事实可能只是确认偏差,但我想知道是否有一种方法可以提取该值.这与我之前使用直方图的方式不同,后者更多的是寻找峰值/谷值.

我正在使用cv2进行图像处理,使用matplotlib.pyplot进行直方图.

python opencv image-processing histogram

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

OpenCV Rect x 和 y 表示(列,行)或(行,列)

我想用 0 值替换图像 (Mat) 的矩形部分。我的图像有 1000 行和 1500 列。我想在 (890,1340) 处遮盖宽度为 150、高度为 100 的补丁。为此,我使用以下代码片段:

cv::Rect patch;
patch.y = 890;
patch.x = 1340;
patch.height = 100;
patch.width = 150;
image(patch) = 0;
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

OpenCV 错误:输入参数的大小不匹配(该操作既不是“数组操作数组”(其中数组具有相同的大小和相同的通道数),也不是“数组操作标量”,也不是“标量操作数组”) cv::arithm_op,文件 C:\build\master_winpack-build-win64-vc14\opencv\modules\core\src\arithm.cpp,第 659 行

我已经更改了 Rect patch 的 x 和 y 坐标,但仍然出现相同的错误。我在互联网上搜索,但我仍然对 Rect 参数感到困惑。

Rect x,y 是否代表(列,行)或(行,列)?

c++ opencv rect mat

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

OpenCV错误:imshow中的断言失败(size.width> 0 && size.height> 0)

我在带有pi相机的Raspberry Pi上运行以下代码,我有它的broadcom驱动程序,但是我收到了一个错误.也许与视频源的尺寸有关,但我不知道如何在Linux上设置它.

码:

import cv2
import numpy as np

cap = cv2.VideoCapture()
while True:
    ret, img = cap.read()
    cv2.imshow('img', img)
    if cv2.waitKey(0) & 0xFF == ord('q):
        break
Run Code Online (Sandbox Code Playgroud)

错误:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, 
file /home/pi/opencv-3.3.0/modules/highgui/src/window.cpp, line 325
Traceback (most recent call last):
  File "check_picam_with_opencv.py", line 10, in <module>
    cv2.imshow('img', img)
cv2.error: /home/pi/opencv-3.3.0/modules/highgui/src/window.cpp:325: error: 
(-215) size.width>0 && size.height>0 in function imshow
Run Code Online (Sandbox Code Playgroud)

python linux opencv

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