c++的opencv4.7版本,做成dll供MFC调用,dll中使用多线程处理多张图片,在加入如下几行代码后,程序每运行一遍,所占内存增加0.05MB,实际图片是1.6MB的。
Mat dst;
fout << "dst 的地址" << &(dst.data) << endl;
cvtColor(src, dst, COLOR_GRAY2BGR);
fout << "dst 的地址" << &(dst.data) << endl;
dst.release();
delete dst.data;
dst.data = nullptr;
有谁遇到这个难题啦?
我的多线程处理函数如下,m_work_img是我的一个公用mat,每次从这里面取图片。
void XDXCustomQueueProcess::Deal_Image(int index)
{
try {
//Sleep(5000); //不可以在m_work_img克隆之前睡眠,会导致m_work_img一直没更新
fout << "进入图像处理线程,线程号:" << std::this_thread::get_id() << "图片序号为: " << index << endl;
unique_lock<mutex> lg0(m_lock);
Mat src = m_work_img.clone();
fout << "m_work_img 的地址"<<&(m_work_img.data) << endl;
fout << "src 的地址" << &(src.data) << endl;
lg0.unlock();
Mat dst;
fout << "dst 的地址" << &(dst.data) << endl;
cvtColor(src, dst, COLOR_GRAY2BGR);
fout << "dst 的地址" << &(dst.data) << endl;
dst.release();
dst = Mat(); //根据别人建议修改,也没改善