Este código funciona bien hasta la última línea. Guarda la imagen correcta en el disco, pero muestra una "pérdida de memoria" después de salir de la función: corrupción de pila. Había leído que Mat no necesita ser lanzado explícitamente. En mi caso, se bloquea tanto con liberación como sin liberación. Por favor ayuda.error de corrupción de montón; no se puede liberar cv :: Mat opencv
void CannyEdgeDetectionFilter::applyFilter(Mat& mat, Mat& mixedBandsMat)
{
//Mat mixedBandsMat;
vector<Mat> bandWiseImages;
split(mat, bandWiseImages);
//! Evaluate numChannels to be filtered in the input image
int numChannels = mat.channels();
int type = mat.type();
//! Multiplied by 8 to get bits from Bytes
int singleChannelDepth = 8*mat.elemSize1();
for (int i = 0; i < numChannels; i++)
{
Canny(bandWiseImages[i], bandWiseImages[i], m_LowerThreshold,
m_UpperThreshold, m_Kernel.rows);
}
//! Creating filteredImgMat in order to set DataValues
mixedBandsMat.create(mat.rows, mat.cols, mat.type());
//! Unifying the channels back to the output image
merge(bandWiseImages, mixedBandsMat);
#if 1
//Release bandWiseImages Mat memory
int bandWiseVecSize = bandWiseImages.size();
for(int i = 0; i < bandWiseVecSize; i++)
bandWiseImages[i].release();
bandWiseImages.clear();
//fromTo.clear();
#endif
imwrite("D:\\testAfterCannyEdgeDetetionFilter.jpg", mixedBandsMat);
mixedBandsMat.release();
}
cómo detecta la corrupción del montón, ¿qué programa está utilizando para eso? solo me preguntaba ... – penelope
¿Muestra una pérdida de memoria o se cuelga? – juanchopanza
Estoy trabajando en Visual Studio 2008. El código se bloquea al salir de la función. – user1412066