void COpenCVMFCView::OnThresholding2() { // TODO: Add your command handler code here int flag=0,thre=0; threImage = cvCloneImage(workImg); cvFlip(threImage); threImage0 = cvCloneImage(threImage); cvNamedWindow(threWin, 0); cvResizeWindow(threWin, 300, 320); cvCreateTrackbar( "Thresh", threWin, &Threshold, 255, onThreChange2 ); cvShowImage( threWin, threImage ); onThreChange2(0); m_ImageType=-3; for (;;) { if (cvWaitKey(40) == 27) break; if (flag == 0) { free(m_lpBmi); m_lpBmi = CtreateMapInfo(workImg,1); flag=1; } if (Threshold != thre) { cvCopy(threImage0,workImg); cvFlip(workImg); CClientDC dc(this); StretchDIBits(dc.m_hDC, // Refresh View 0,0,workImg->width,workImg->height, 0,0,workImg->width,workImg->height, workImg->imageData,m_lpBmi,DIB_RGB_COLORS,SRCCOPY); thre = Threshold; } } cvReleaseImage(&threImage); cvReleaseImage(&threImage0); cvDestroyWindow(threWin); m_ImageType = -1; Invalidate(); }
void COpenCVMFCView::OnDraw(CDC* pDC) { COpenCVMFCDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here if (pDoc->pImg != NULL) { // got image to save to disk if (pDoc->m_Display == 0) { // not displayed yet imageClone(pDoc->pImg,&saveImg); // copy to backup image m_dibFlag = imageClone(saveImg,&workImg); // copy to work image m_ImageType = imageType(workImg); m_SaveFlag = m_ImageType; pDoc->m_Display = 1; } } if (m_dibFlag) { // convert the DIB format if (m_lpBmi) free(m_lpBmi); m_lpBmi = CtreateMapInfo(workImg,m_dibFlag); m_dibFlag = 0; CSize sizeTotal; sizeTotal = CSize(workImg->width,workImg->height); SetScrollSizes(MM_TEXT,sizeTotal); // set the scroll bar } char *pBits; if (m_CaptFlag == 1) pBits = m_Frame->imageData; else if (workImg) pBits = workImg->imageData; if (workImg) { // refresh UI StretchDIBits(pDC->m_hDC, 0,0,workImg->width,workImg->height, 0,0,workImg->width,workImg->height, pBits,m_lpBmi,DIB_RGB_COLORS,SRCCOPY); } }
void CFRManagerCtrl::ShowImageOnClient(HDC pDC, IplImage* image, CRect rect,CRect ROI,int flags) { char info[100]; IplImage* image_show=cvCloneImage(image); if (ROI.Width()!=0&&ROI.Height()!=0) { CvRect rc; rc.x=ROI.left; rc.y=ROI.top; rc.height=ROI.Height(); rc.width=ROI.Width(); cvSetImageROI(image,rc); cvNamedWindow("处理前"); cvShowImage("处理前",image); //转换色彩空间 cvCvtColor(image,image,CV_RGB2HSV); //分离通道 IplImage* imgChannel[3] = { 0, 0, 0 }; for (int i=0; i<image->nChannels; i++) { imgChannel[i] = cvCreateImage( cvGetSize( image ), IPL_DEPTH_8U, 1 ); //要求单通道图像才能直方图均衡化 } cvSplit( image, imgChannel[0], imgChannel[1], imgChannel[2],0);//HSVA CvFont font; cvInitFont( &font,CV_FONT_HERSHEY_PLAIN,1, 1, 0, 1, 8); for (int i=0; i<image->nChannels; i++) { CvScalar avg=cvAvg(imgChannel[i]); memset(info,'\0',100); sprintf(info,"%f",avg.val[0]); cvPutText(image_show, info , cvPoint(0,20*(i+1)), &font, CV_RGB(255,0,0)); } // CvScalar avg=cvAvg(image); // memset(info,'\0',100); // sprintf(info,"%f",avg.val[0]); // CvFont font; // cvInitFont( &font,CV_FONT_HERSHEY_PLAIN,1, 1, 0, 1, 8); // cvPutText(image_show, info , cvPoint(0,20), &font, CV_RGB(255,0,0)); /*cvCvtScale(image,image,1.0,100-avg.val[0]);*/ CvScalar avg=cvAvg(imgChannel[2]); cvCvtScale(imgChannel[2],imgChannel[2],1.0,YUZHI-avg.val[0]); cvMerge( imgChannel[0], imgChannel[1], imgChannel[2], 0, image ); for (int i=0; i<image->nChannels; i++) { CvScalar avg=cvAvg(imgChannel[i]); memset(info,'\0',100); sprintf(info,"%f",avg.val[0]); cvPutText(image_show, info , cvPoint(0,20*(i+4)), &font, CV_RGB(255,0,0)); } cvCvtColor(image,image,CV_HSV2RGB); cvNamedWindow("处理后"); cvShowImage("处理后",image); for (int i=0; i<image->nChannels; i++) { cvReleaseImage(&imgChannel[i] ); } // avg=cvAvg(image); // memset(info,'\0',100); // sprintf(info,"%f",avg.val[0]); // cvPutText(image_show, info , cvPoint(0,40), &font, CV_RGB(255,0,0)); } char* imagedata=image_show->imageData; LPBITMAPINFO lpbitm; lpbitm=CtreateMapInfo(image_show,flags); StretchDIBits(pDC, rect.left,rect.top,rect.Width(),rect.Height(), 0,0,image_show->width,image_show->height, imagedata,lpbitm,DIB_RGB_COLORS,SRCCOPY); cvReleaseImage(&image_show); //pDC.Rectangle(rect); }