跑医学图像分割,测试效果极差,为了确认是自己代码出了问题还是数据标定有问题,于是下载他人代码跑自己数据。
他人代码中,dataset.py中进行数据增强时,调用了cv::flip函数,这个函数在跑他的图片没问题,跑我的图片就会出现如下报错
error: (-215:Assertion failed) _src.dims() <= 2 in function 'cv::flip'
报错意思是图像维度小于等于2,可我在调用flip的前一行执行了如下语句
print(image.shape)
print(type(image).__name__)
控制台结果显示我的数据尺寸为(1,640,640),他的为(1,512,512),双方都是ndarray类,图像维度都为3。但他的数据不报错,我的必报错。
我跑双方的数据集是通过改文件名实现的,比如我要跑我的数据,就会把我的数据所在文件夹改为data,把他的数据从data改为data1或其他名字,这样函数读取的就是我的图片。
在使用 cv2.flip 函数时,你需要确保输入图像的维度小于等于2。由于你的数据尺寸为(1,640,640),它的维度为3,因此会导致错误。
你可以考虑去掉第一个维度,使用类似于 image = image[0] 这样的代码将图像的维度降低到2。
此外,你还可以考虑使用 numpy 的 flip 函数来进行图像翻转,它不需要满足图像维度的限制。
最后,你可以使用 numpy 的 transpose 函数来调整图像的维度顺序,以便更好地处理图像。
你也可以考虑在 dataset.py 文件中加入判断,以便更好地处理不同尺寸的图像,以避免错误。
你好,按照你所描述的情况,看起来是你自己的数据集可能存在一些问题,导致数据增强时调用cv::flip函数时报错。
根据官方文档,cv::flip函数只能处理2维或者3维灰度图像。(请检查一下图片格式)
建议你先检查一下你的数据集是否符合cv::flip函数的要求,然后再尝试调用cv::flip函数。如果问题依然存在,你可以尝试使用pdb或者其他工具调试代码,确定具体的问题所在。
1、数据类型不匹配:如果你的数据与他人代码中使用的数据类型不同可能导致错误。
2、数据大小不匹配:你的数据与他人代码中使用的数据大小不同,也可能导致错误。
3、读取数据顺序不同:如果你的数据与他人代码中使用的数据顺序不同,也可能导致错误。
Opencv中flip函数讲解
借鉴下
https://blog.csdn.net/LYKymy/article/details/95066525
如果可以,将代码贴出来会更直观,我感觉应该是你前面的某个if-else执行不一样导致的结果。
另外,python和c++下面opencv最大的不同是,c++下面的channel是在前面的,而python里面的channel在后面,所以正常情况下你的数据应该是(640x640x1)才对,你这个做了维度交换了?
至于2维和3维的问题,要知道如果你不是以特殊的方式建立的图像,就算你是RGB三通道的图像,在opencv里面也算是2维的,除非你是以数组的方式建立的,或者做过图像维度交换。