【问题标题】:cvtcolor in Cv2 - no attributeCv2 中的 cvtcolor - 无属性
【发布时间】:2014-07-22 05:29:21
【问题描述】:

我正在编写一个程序来收集来自 USB 显微镜的一系列图像并生成平均值作为去噪的一种方式。我必须将图像转换为 numpy 数组,对像素求和,然后在转换回图像之前进行除法。

在某处通道混合在一起,所以我的输出是 BGR 而不是 RGB,我正在尝试使用 cvtcolor 来纠正它但得到错误:

---> 55 RgbImage = cv2.cvtcolor(ave_image,cv2.COLOR_BGR2RGB) 56 返回RGB图像

AttributeError: 'module' 对象没有属性 'cvtcolor'

大概 cvtcolour 不是从 CV2 导入的,但我不明白为什么。这是相关的代码部分。

最后,虽然平均效果很好,但有没有更优雅的方法呢?我需要一个简单的平均值而不是加权平均值。

import os, numpy, PIL
from PIL import Image
import cv2
import time
frameaverage=5


 def average_image():

 arr=numpy.zeros((h,w,3),numpy.float)
 # Build up average pixel intensities as floating
 for im in xrange(frameaverage):
    camera_capture = get_image()
    imarr=numpy.array(camera_capture,dtype=numpy.float)
    arr=arr+imarr/frameaverage
 # Round values convert to 8-bit integer
 arr=numpy.array(numpy.round(arr),dtype=numpy.uint8)
 ave_image=Image.fromarray(arr,mode="RGB")
 RgbImage = cv2.cvtcolor(ave_image,cv2.COLOR_BGR2RGB)
 return RgbImage

【问题讨论】:

  • 从精度的角度来看(尽管如果你只对 5 个图像进行平均并不重要)最好将 'arr' 定义为 double 或 uint16/32/64 类型(取决于平均图像的数量)。将 'arr=arr+imarr/frameaverage' 替换为 'arr=arr+imarr' 并在循环之后执行 'avg = arr/frameaverage'

标签: python image opencv numpy rgb


【解决方案1】:

在 cv2 函数中 cvtcolor 重命名为 cvtColor。所以你应该使用RgbImage = cv2.cvtColor(ave_image,cv2.COLOR_BGR2RGB)

【讨论】:

  • 干杯,这修复了原始错误,但产生了另一个关于对象不是 numpy 数组的问题,所以我不得不稍微调整一下 >RgbImage = cv2.cvtColor(arr,cv2.COLOR_BGR2RGB) > ave_image=Image.fromarray(RgbImage,mode="RGB")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 2020-06-04
相关资源
最近更新 更多