gpt4 book ai didi

c++ - wxWidgets + OpenCV : wxBitmap does not draw wxImage correctly

转载 作者:行者123 更新时间:2023-11-28 06:42:32 29 4
gpt4 key购买 nike

我正在尝试用 cv::Mat 原始数据制作一个 wxImage,并用一个 wxBitmap 绘制它一个 wxPanel 派生类(这个 bmImage 类)。

下面是将 cv::Mat 数据加载到 wxImage 中的代码。

cv::Mat asCvMat = cv::imread("something.png", 1);
cv::imshow("preview", asCvMat);
cv::Mat cvtResult;
aswxImage = wxImage(asCvMat.cols, asCvMat.rows, asCvMat.data, true);
wxLogMessage(wxT("%s"), std::string((char*)asCvMat.data));

下面是绘制wxBitmap 的代码。

void bmImage::render(wxDC& dc) {
wxBitmap bitmap = wxBitmap(aswxImage);
dc.DrawBitmap(bitmap, wxPoint(0, 0), false);
}

enter image description here

左边的小图像是我尝试加载并用 cv::imshow 显示的图像,右边的是生成的 wxBitmap。它没有正确显示图像。我应该如何解决此问题才能正确显示图像?

此外,让我感到困惑的是 asCvMat.data 的(空)值。这是否意味着 wxImage() 已完成从中加载所有像素数据,因此它已到达结尾 (\0)?

编辑

cv::Mat asCvMat = cv::imread("something.png", 1);
cv::imshow("preview", asCvMat);
void *mdata = malloc((size_t)(asCvMat.dataend - asCvMat.datastart));
std::memcpy(mdata, asCvMat.data, (size_t)(asCvMat.dataend - asCvMat.datastart));

cv::Mat cvtResult;
aswxImage = wxImage(asCvMat.cols, asCvMat.rows, (unsigned char*)mdata, false);

wxLogMessage(wxT("%s"), std::string((char*)mdata));

但这是一回事...如果我加载大图像,有时它会抛出未处理的内存异常。

最佳答案

您确定 cv::Mat 数据是 wxImage 所期望的格式,即没有任何交错的简单 RGB 格式吗?

此外,您究竟如何调用 render()?你不能/不应该直接调用它,它是从你的 wxEVT_PAINT 处理程序调用的吗?

关于c++ - wxWidgets + OpenCV : wxBitmap does not draw wxImage correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25707066/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com