MFC中采用分段线性对比度处理图像并且显示在控件中
2017-09-16 14:50
393 查看
功能:获取原图后,通过opencv相关函数对图像像素点进行对比度处理,然后在MFC的PictureControl中显示出来。
采用Opencv2.3.1,CvvImage类已经不在其中,需要额外增加,需要自行下载。
参数过多,更多实用算法可在此基础上开发。
头文件:
实现:
采用Opencv2.3.1,CvvImage类已经不在其中,需要额外增加,需要自行下载。
参数过多,更多实用算法可在此基础上开发。
头文件:
CvvImage m_CvvImage; IplImage* m_Frame; int m_X1; int m_Y1; int m_X2; int m_Y2;
实现:
void XXX::OnBnClickedButtonSetContrast() { UpdateData(TRUE); pDC=pStc->GetDC(); //得到Picture控件设备上下文 hDC=pDC->GetSafeHdc(); //得到控件设备上下文的句柄 int nRows = srcImage.rows; int nCols = srcImage.cols; Mat dstImage = srcImage.clone() ;//完全拷贝,把image中的所有信息拷贝到image1中 //判断图像的连续性 if (dstImage.isContinuous()) { nCols = nRows*nCols; nRows = 1; } uchar *pDataMat; for( int j = 0; j < nRows; j++ ) { pDataMat = dstImage.ptr<uchar>(j);//ptr<>()得到的是一行指针 for( int i = 0; i < nCols; i++ ) { if (pDataMat[i]<=m_X1) pDataMat[i] = m_Y1 * pDataMat[i] / m_X1; else if ( pDataMat[i]<=m_X2) pDataMat[i] = (m_Y2-m_Y1)*( pDataMat[i]-m_X1)/(m_X2-m_X1) + m_Y1; else pDataMat[i] = (255-m_Y2)*( pDataMat[i]-m_X2)/(255-m_X2) + m_Y2; if (pDataMat[i] < 0) pDataMat[i] = 0; if (pDataMat[i] > 255) pDataMat[i] = 255; } } imshow("原图", srcImage); //与效果图对比 Mat iMat(dstImage.rows, dstImage.cols, CV_8UC1, pDataMat, dstImage.cols); m_Frame=&IplImage(iMat); m_CvvImage.CopyOf(m_Frame); m_CvvImage.DrawToHDC(hDC, &rect); m_CvvImage.Destroy(); ReleaseDC( pDC ); UpdateData(FALSE); }
相关文章推荐
- 利用MFC的Picture控件显示和处理图像
- OpenCV 利用MFC的Picture控件显示和处理图像
- OpenCV 利用MFC的Picture控件显示和处理图像
- OpenCV 利用MFC的Picture控件显示和处理图像
- OpenCV学习笔记(三):将图像显示在MFC控件上并做直方图均衡化处理
- MFC—PictureControl控件使用,显示和处理图像
- Qt中通过控件平滑处理图像并且显示在Label标签中
- 利用MFC的Picture控件显示和处理图像
- OpenCV 利用MFC的Picture控件显示和处理图像
- 利用MFC的Picture控件显示和处理图像
- VS2010 MFC中的Picture控件显示图像
- MFC中打开任意图像并在picture control控件中显示Mat对象
- 利用MFC中的picture control 控件显示图像
- 【OpenCV+MFC】之一:在Picture控件显示图像
- MFC对话框的picture控件中显示IplImage*格式图像
- Opencv (Opencv2)结合MFC学习数字图像处理【3】---显示图片
- MFC图像处理-图像扫描显示之基本窗口
- Opencv (Opencv2)结合MFC学习数字图像处理---显示图片
- MFC+OpenCV 利用Show方法使图像不拉伸显示在Picture控件上