Visual c++ 如何在pictureBox VC++;
我正在开发一个VC++和OpenCV应用程序,我正在将图像加载到PictureBox并对其进行一些OpenCV操作,我将加载的图像分配到IplImage进行处理,然后将处理后的图像再次分配到PictureBox,我编写此代码将从openFileDialog选择的图像加载到IplImage,对图像进行二值化,然后将二值化图像重新分配回pictureBox 代码: 但是我没有找到一种显示二进制图像的格式,对此我没有任何帮助 原始图像: 转换图像:Visual c++ 如何在pictureBox VC++;,visual-c++,image-processing,opencv,bitmap,Visual C++,Image Processing,Opencv,Bitmap,我正在开发一个VC++和OpenCV应用程序,我正在将图像加载到PictureBox并对其进行一些OpenCV操作,我将加载的图像分配到IplImage进行处理,然后将处理后的图像再次分配到PictureBox,我编写此代码将从openFileDialog选择的图像加载到IplImage,对图像进行二值化,然后将二值化图像重新分配回pictureBox 代码: 但是我没有找到一种显示二进制图像的格式,对此我没有任何帮助 原始图像: 转换图像: 您似乎正在创建RGB图像(System::Draw
您似乎正在创建RGB图像(System::Drawing::Imaging::PixelFormat::Format24bppRgb),但将灰度复制到其中,可能System::Drawing::Imaging函数没有进行转换,或者没有正确地进行转换 编辑:更多解释。
灰度图像作为每个像素Y0、Y1、Y2、Y3的一个字节存储在内存中。。。。。。Y639(我们使用Y表示亮度,并假设图像宽度为640像素) 您已经告诉.net image类,这是一个24bpprgb格式,它将存储为每像素一个红色、一个绿色和蓝色字节(3bytes=24bpp)。因此,该类获取图像数据,并假设Y0、Y1、Y2是第一个像素的红、绿、蓝值,Y3、Y4、Y5是下一个像素的值,依此类推。
这将使用图像的3倍字节,因此在该行的1/3之后,它开始读取下一行,依此类推-这将为您提供三个重复的图片
另外,将其转换为二进制图像的事实只意味着Y值为0或255-它不会更改数据大小或形状 System::Drawing::Imaging如何进行转换并在pictureBox中显示图像?@Eslam如果您想在.net框中显示灰度图像,请告诉它使用灰度像素类型而不是24bppRgbi。我尝试使用Format16bpprrayscale,但它抛出了一个错误exception@Eslam您正在给system::drawing。。。它不支持的8位灰度。为什么不给它彩色图像?我不是给system::绘制灰度图像我给它一个二值图像,因为我想对原始图像进行二值化并将输出加载到picturebox中
const char* fileName = (const char*)(void*)
Marshal::StringToHGlobalAnsi(openFileDialog1->FileName);
IplImage *img=cvLoadImage(fileName,CV_LOAD_IMAGE_COLOR);
int width=img->width;
int height=img->height;
IplImage *grayScaledImage=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
cvCvtColor(img,grayScaledImage,CV_RGB2GRAY);
cvThreshold(grayScaledImage,grayScaledImage,128,256,CV_THRESH_BINARY);
this->pictureBox1->Image=(gcnew
System::Drawing::Bitmap(grayScaledImage->width,grayScaledImage->height,grayScaledImage->widthStep,
System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr)grayScaledImage->imageData));