python - 在 OpenCV 3.0 中如何在元素操作之后使用像 equalizeHist 这样的函数(python 和 C++)

标签 python opencv opencv3.0 elementwise-operations

我已经对我的图像进行了元素操作。 (基本上我实现了一个算法来去除污迹。注意avggrad,I0avggrad,avg和I0avg都是mat类型,包含floats作为元素)

a = avggrad/I0avggrad
b = avg - I0avg * a

originalImg = cv2.imread("testImage.jpg",0) #load as a grayscale
cleanImg = (originalImg - b)/a
cv2.imwrite("Step1.jpg",cleanImg) # the image opens up in gimp as a cleaned up image

用完之后想做直方图均衡化

img = cv2.equalizeHist(cleanImg)

但是我不能这样做,因为我收到以下错误

"Assertion failed (_src.type() == CV_8UC1)"

我意识到这是因为图像格式存在某些不一致。在短期内,我有一个小的解决方法。我保存图像并加载保存的图像,然后它就可以工作了。但我想知道一个更好的方法。为了冗长,我也会写下这段代码

作为附加信息,我在打印时给出了矩阵的输出

输出

print cleanImg

[[   0 -123 -121 ..., -126 -117    0]
 [ 119  126 -127 ..., -127 -124 -121]
 [ 122 -128 -125 ..., -123 -126 -117]
 ..., 
 [-126  127  126 ..., -124 -125 -125]
 [-128 -127  127 ..., -123 -123 -121]
 [   0 -126  127 ..., -120 -123    0]]

以下代码的输出

reloadedImage = cv2.imread("Step1.jpg",0)
print reloadedImage

是:

[[  0 135 136 ..., 129 138   0]
 [121 126 128 ..., 130 136 136]
 [122 124 133 ..., 135 129 140]
 ..., 
 [128 124 129 ..., 135 128 131]
 [131 131 126 ..., 131 136 137]
 [  0 132 129 ..., 135 134   0]]

显然正在进行转换。谁能建议一个更好的方法来解决这个问题?也许我应该尝试将矩阵“avggrad、I0avggrad、avg 和 I0avg”转换为整数,然后继续?

另外请建议如何在 C++ 中解决类似的问题,因为我稍后必须在 C++ 中实现它,我相信它可能会帮助遇到类似问题的其他人。 (据我所知,一个名为 convertTo 的函数可能会有所帮助,对吗?)

最佳答案

如评论中所述,在使用 equalizeHist() 之前,您需要将矩阵转换为 uchars

C++ 版本:

A.convertTo(A, CV_8UC1);

Python 版本:

A = A.astype(np.uint8)

我还注意到您的某些矩阵具有负项并且在 [-128, 127] 范围内。您可能希望将它们移动到 [0, 255] 范围以避免丢失信息。

关于python - 在 OpenCV 3.0 中如何在元素操作之后使用像 equalizeHist 这样的函数(python 和 C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34226765/

相关文章:

python - save() 得到了一个意外的关键字参数 'commit' Django 错误

python - 协程本质上是一个类吗?

python - 创建文件夹的摘要文本文件,其中包含文件名和每个文件的前两行

python - 使用 python、opencv 列出 Raspberry Pi 4 上所有支持的编解码器/fourcc 标签

opencv - 无法使用MacPort在带有XCode 4.2的Mac OSX 10.7.3上安装opencv

OpenCV Remap 形状为map1 (h,w,2) 和形状map2 (h,w)

python - 以 10 为基数的 int() 的 Django 无效文字 : '??????? ???????' when i try to migrate

c++ - cvCreateCameraCapture 无法访问 OpenCV 3.0 相机

python-3.x - 如何在终端中删除给定的args并在argparse中添加自己的args

compiler-errors - 如何从opencv gpumat创建推力device_vector