示例#1
0
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();
}
示例#2
0
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);
}