MFC中采用分段线性对比度处理图像并且显示在控件中

来源:互联网 发布:banner设计软件 编辑:程序博客网 时间:2024/06/11 23:03

功能:获取原图后,通过opencv相关函数对图像像素点进行对比度处理,然后在MFC的PictureControl中显示出来。

采用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);}


阅读全文
1 0
原创粉丝点击