Hi there,
I am opening a bmp image and converting it into CV::MAT format (opencv) . And then write that image into disk. Following is the code I am using. If I am using grayscale image, the writing to disk is working fine. If I am using a color image I am getting a memory access violation. Can you please let me know how to fix this?
Bitmap^ sourceBMP;
sourceBMP = gcnew Bitmap("C:/opencv/[login to view URL]", true);
//sourceBMP = gcnew Bitmap("C:/opencv/[login to view URL]", true);
cv::Mat cvImg, cvImg_out;
System::Drawing::Rectangle rect = System::Drawing::Rectangle(0, 0, sourceBMP->Width, sourceBMP->Height);
bmp_Depth = System::Drawing::Bitmap::GetPixelFormatSize(sourceBMP->PixelFormat);
bmp_BitsPerPixel = bmp_Depth / 8;
bitmapData = sourceBMP->LockBits(rect, System::Drawing::Imaging::ImageLockMode::ReadWrite, sourceBMP->PixelFormat);
stride = Math::Abs(bitmapData->Stride);
if (bmp_Depth == 8) cvImg = cv::Mat(sourceBMP->Height, stride, CV_8UC1, (char*)bitmapData->[login to view URL]());
if (bmp_Depth == 24) cvImg = cv::Mat(sourceBMP->Height, stride, CV_8UC3, (char*)bitmapData->[login to view URL]());
cv::imwrite("C:/opencv/[login to view URL]", cvImg);
if (bmp_Depth == 24)
{
cv::cvtColor(cvImg, cvImg_out, CV_BGR2XYZ);
cv::imwrite("C:/opencv/[login to view URL]", cvImg_out);
}
Hello. I am a senior level developer and Visual C++ expert. Can you please provide both a grayscale and color image that induces the memory access violation you're seeing? If so, I'm confident I can identify your problem.
Please feel free to send me a private message to discuss any details. You do not need to pay me anything until the solution is provided, no milestone payments necessary.
Thanks and I look forward to working with you.
$30 USD en 1 día
5,0 (3 comentarios)
1,9
1,9
8 freelancers are bidding on average $27 USD for this job
Hello there,
Open CV is only meant (or built ) for native C++ on Windows platforms; not managed C++.
Given the sheer amount of pointers and low-lelve C and C+= features used by OpenCV, I'm not at all surprised that you are having problems accessing OpenCV functions - correctly- using Managed C++.
Do you mind me asking :
1) What version of Open CV libraries are you linking against?
2) What version of Visual Studio are you using?
3)What kind of greater context is this application running in?
I can help you - possibly, once I know some answers to the above questions.
Cheers
I guess (without even installing opencv because compiling it is such a pain) that your colour bitmaps are in RGBA (this is semi standard for .bmp) which means you have 3 colour channels plus an alpha channel. Which means your colour depth is greater than 24. Which in turn means that your 'cvImg' is empty when you try to write it.
I apologise in advance if this is wrong.