When the input arrays in add/subtract/multiply/divide functions have different types, the output arr

本文主要是介绍When the input arrays in add/subtract/multiply/divide functions have different types, the output arr,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python 中使用cv2出现的错误。

背景:自己谢了一个热力图可视化的轮子,代码如下:

    def intensity_heatmap(background_img, intensity_map, blue_mask_weight=0.3, heat_map_weight=0.5):""":param background_img: 背景图 shape=[H,W,C]:param intensity_map: 损失强度图 shape=[H,W,C]:param blue_mask_weight::param heat_map_weight::return:"""assert background_img.ndim == 3assert intensity_map.ndim == 2 or intensity_map.ndim == 3assert background_img.shape[0:2] == intensity_map.shape[0:2]background_img_norm = ((background_img - background_img.min()) / (background_img.max() - background_img.min())* 255).astype(np.uint8)intensity_map_norm = ((intensity_map - intensity_map.min()) / (intensity_map.max() - intensity_map.min())* 255).astype(np.uint8)# 背景图需要加一个蓝色掩码,以更好的显示热力图blue_mask = cv2.rectangle(background_img.copy(), (0, 0), background_img.shape[0:2], (0, 0, 256), -1)heatmap_base = cv2.addWeighted(blue_mask, blue_mask_weight, background_img_norm, 1 - blue_mask_weight, 0,dtype=cv2.CV_8U)# heatmap_base = cv2.addWeighted(blue_mask, blue_mask_weight, background_img_norm, 1 - blue_mask_weight, 0,#                                dtype=cv2.CV_32F)# 获取热力图hotmap_blue = np.array(cv2.applyColorMap(intensity_map_norm, cv2.COLORMAP_HOT))  # 是蓝色的3通道heatmaphotmap_red = cv2.cvtColor(hotmap_blue, cv2.COLOR_RGB2BGR)  # 由蓝色heatmap转为红色heatmapintensity_hotmap_img = cv2.addWeighted(hotmap_red, heat_map_weight, heatmap_base, 1 - heat_map_weight, 0)return intensity_hotmap_img

但是有时候经常出现这个错误(真的是不只一次,很烦,每一次都要上网查一下...):

Traceback (most recent call last):File "draw_bin_on_img.py", line 52, in <module>img2 = cv2.addWeighted(img,0.01,img0,0.99,0)
cv2.error: OpenCV(4.1.2) /io/opencv/modules/core/src/arithm.cpp:687: error: (-5:Bad argument) When the input arrays in add/subtract/multiply/divide functions have different types, the output array type must be explicitly specified in function 'arithm_op‘

错误的原因:就是cv2.addWeighted的两幅图像的数据格式不一样。

解决方法:

具体的修正方法就是通过对数据格式的设置,强迫使两个图像的数据格式一致。

修改方式1:一些博客的解决方法是:

img2 = cv2.addWeighted(img,0.01,img0,0.99,0, CV_32F)

但是这种方法会报错:

Traceback (most recent call last):File "draw_bin_on_img.py", line 51, in <module>img2 = cv2.addWeighted(img,0.01,img0,0.99,0, CV_32F)
NameError: name 'CV_32F' is not defined

修改方式2:进一步的修改方法是:

img2 = cv2.addWeighted(img,0.01,img0,0.99,0, dtype = cv2.CV_32F)

此时需要注意的问题是:我们设置的dtype=cv2.CV_32F。 cv2可是修改数据格式,但是并没有对数据进行归一化,所以,如果是的像素取值是[0,255]的话,此时显示的图像会是空白图。

修改方式3:

img2 = cv2.addWeighted(img,0.01,img0,0.99,0, dtype = cv2.CV_32F)

如果两个源图像的像素取值范围是[0,255],应该设置dtype=cv2.CV_8U,

如果两个源图像的像素取值范围是[0, 1],应该设置dtype=cv2.CV_32F       
 

参考:https://blog.csdn.net/qq_35250841/article/details/108320967

这篇关于When the input arrays in add/subtract/multiply/divide functions have different types, the output arr的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/687987

相关文章

Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.B

一个bug日志 FATAL EXCEPTION: main03-25 14:24:07.724: E/AndroidRuntime(4135): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.syyx.jingubang.ky/com.anguotech.android.activity.Init

rtklib.h : RTKLIB constants, types and function prototypes 解释

在 RTKLIB 中,rtklib.h 是一个头文件,包含了与 RTKLIB 相关的常量、类型和函数原型。以下是该头文件的一些常见内容和翻译说明: 1. 常量 (Constants) rtklib.h 中定义的常量通常包括: 系统常量: 例如,GPS、GLONASS、GALILEO 等系统的常量定义。 时间常量: 如一年、一天的秒数等。 精度常量: 如距离、速度的精度标准。 2. 类型

ubuntu16.04 Git add 使用tab键卡死

以前使用Ubuntu14.04 进行git add 操作时使用TAB键可以很快自动补全,但自从使用16.04使用TAB半天没有反应。 一开始以为是Git版本问题,后验证与Git无关。 搜索发现与Dash有关,以下是博客原文: http://www.51testing.com/html/50/n-1245050.html 今天碰到一个问题git 后面的参数用Tab键无法补全

Add All -uva优先队列的应用

题目的解法属于贪心,因为cost=a1+a2,所以要保证每次的cost最小,所以说,每次将队列中最小的两个相加,得出来的数放入队列中,再取2个最小的相加,直到全部加完,所以这就涉及了一个取2个最小数的问题,我说一下我一开始的做法 #include<stdio.h>#include<iostream>#include<stdlib.h>using namespace std;#define

Android studio jar包多层嵌套,Add library '__local_aars__:...@jar' to classpath问题

在添加jar包,早app下的build.gradle中的 implementation files('libs/jar包的名字.jar') 修改为 api files('libs/jar包的名字.jar') implementation 单层引用,只引用当前jar包层, api 多层引用,应用当前jar包层,已经jar包引用的jar包层

bedtools subtract 基因区段取差集

基本概述: bedtools subtract 通俗的说,得到 A - B 的区段。如果在A中发现了B区段,就把 B 扣除,通过不同的参数,扣除的标准不一样。其中,参数 -A 可以达成 Remove features with any overlap 的效果(第四行)。 使用方法: bedtools subtract [OPTIONS] -a <BED/GFF/VCF> -b <BE

unable to access android sdk add-on list解决办法

mac环境,由于不小心删掉了sdk文件夹的内容,拷贝别人的文件内容过来后,发现sdkmanager不见了。 慌乱中重装了Android Studio。 打开app后发现如下提示:unable to access android sdk add-on list 解决办法: 在 Android Studio 安装目录 bin/idea.properties 文件最后追加一句 disabl

GIT:git add命令指定文件夹

git add命令可以指定文件夹来添加文件到git仓库中。 1、使用相对路径         当你在命令行中使用git add命令时,可以通过相对路径指定文件夹。例如,如果你的文件夹名为myfolder,可以使用以下命令将整个文件夹添加到git仓库中: git add myfolder/ 注意,路径名后面的斜杠是必需的,它表示将文件夹中的所有文件都添加。如果不加斜杠,命令会视为添加具

Flink实战案例(二十三):自定义时间和窗口的操作符(四)window functions之增量聚合函数(一)ReduceFunction

实例一 例子: 计算每个传感器15s窗口中的温度最小值 val minTempPerWindow = sensorData.map(r => (r.id, r.temperature)).keyBy(_._1).timeWindow(Time.seconds(15)).reduce((r1, r2) => (r1._1, r1._2.min(r2._2))) 实例二 ReduceFun

vue中oninput和@input区别

使用oninput绑定,此方法会导致中文输入法情况下,v-model和value不一致,原因是在中文输入法情况下vue中的v-model会自动return,v-mode绑定的值不变,value绑定的值可变。 :οninput="value=value.replace(/\D/g,'')" @input="row[item.prop]=row[item.prop].replace(/\D/g,'