我每次读取文件时都尝试使用不同的长度字节读取二进制文件.获得值后,我尝试将字节转换为char*.
我创建了一个简单的代码如下:
//This code is compiled in Visual Studio 2010
typedef unsigned char BYTE;
BYTE *s;
s = new BYTE[3]; // I read 2 bytes from the file, I add +1 to reserve NULL
s[0]= 'a'; s[1]='b';s[2]=NULL; //just an example I get 2 bytes from file
char* b;
b = new char(sizeof(s));
strcpy(b,(char*)s);
s[0]='x';
cout << s <<"--"<< b<< "--"<< endl;
delete[] s;
delete[] b;
cin.get();
return 0;`
Run Code Online (Sandbox Code Playgroud)
但是,代码会生成错误"Heap Corruption Detected".当我删除该行时,delete[] b;该程序运行良好.但是我不确定下次是否会出现问题.请问有人解释一下吗?如果我删除会导致内存泄漏delete[] b;吗?有什么建议来改进我的代码吗?
我想在MATLAB中使用数学形态学函数来找到can.png图像的边界.输入图像是:

我想得到一个边界,如:

我尝试使用不同的组合和参数使用strel,imerode,imdilate,但结果不够好(远远超出预期)
我的一个试用代码是:
a = imread ('can.png');
b = im2bw(a);
SE = strel('rectangle', [10 50 ]) ;
i2 = imdilate(b,SE);
figure(1); imshow(i2);
p = ones(4);
c = b - imerode(b,p);
figure(2); imshow(c);
Run Code Online (Sandbox Code Playgroud)
输出是:

任何身体可以帮助我,如何创建预期的图像(罐头的边界很薄的黑色背景,拜托?非常感谢你.