C ++中的openCV Mat访问冲突

时间:2018-10-27 19:39:58

标签: c++ opencv mat fits

我收到“ .exe:0xC0000005:访问冲突读取位置0x0000023339631FB8中的0x00007FFF428944E0(opencv_world343d.dll)引发异常”。我已经阅读了一些“访问冲突读取位置”的帖子和主题,但是我认为我正确地分配和初始化了内存,这似乎经常是问题所在。

我的代码包含一个“ loadfits”功能,该功能可加载16位灰度图片并将其存储在openCV cv :: Mat中。该函数有效-在return语句的最后,我可以显示或保存图像,并且在函数内部一切正常。但是,当我尝试访问并使用main()中的cv :: Mat时,出现访问冲突错误。

const Discord = require('discord.js');

exports.run = function(korra, message, args) {
    let sprite = message.content.toLowerCase().split(' ').slice(1).join(" ");
    let pokemonurl = (`https://play.pokemonshowdown.com/sprites/xyani-shiny/${sprite.replace(/ /g,'-')}.gif`);
    let names = args.slice(0).join(' ');
    if (!sprite) return message.channel.send("You need to write a pokemon name!!");
    const embed = new Discord.RichEmbed()
        .setDescription('You have requested this pokemon:')
        .setImage(pokemonurl)
        message.channel.send(embed);      
}

exports.conf = {
    enabled: true, 
    guildOnly: true, 
    aliases: [],
    permLevel: 0 
  };

  exports.help = {
    name: 'shiny', 
    description: 'Shows shiny pokemons',
    usage: 'shiny <pikachu>'
  };

然后我使用此函数来初始化并使用main()中的cv :: Mat

#define DFTtypeCV CV_64FC1
#define PICtypeCV CV_16UC1  //16bit grayscale image

Mat loadfits(std::string path)
{
ifstream streamIN(path, ios::binary | ios::in);
vector<char> celyobraz_8(fitsSize*fitsSize * 2, 0);
streamIN.read(&celyobraz_8[0], fitsSize*fitsSize * 2);

... //some code

Mat fits_PICTURE_Mat = Mat(fitsSize, fitsSize, PICtypeCV, &celyobraz_8[0], Mat::AUTO_STEP);

showimg(fits_PICTURE_Mat, "fitsRaw"); //shows the correct image
return fits_PICTURE_Mat;    //returns the same image
}

我认为我可以轻松解决此错误,因为我在函数return语句之前就拥有正确的数据,但似乎无法弄清楚。

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:0)

有同样的问题。就我而言,解决方案是在发行版配置中删除指向opencv_world343d.dll的链接。该文件仅用于调试模式。

(最初,我遵循此说明http://shailendra.me/tutorial/add-opencv-to-visual-studio-c++-project/