首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

MFC 界面设计,该如何处理

2012-03-05 
MFC 界面设计想做个像图像一样的界面,代码如下面写的,但总是出错,请大家帮忙下。#include iostream.h#inc

MFC 界面设计

想做个像图像一样的界面,代码如下面写的,但总是出错,请大家帮忙下。
#include "iostream.h"
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include "cv.h"

#include "highgui.h"
#include "cxcore.hpp"
IplImage* src=NULL;
IplImage* bin=NULL;
IplImage* bing=NULL;
IplImage* psrc=NULL;
IplImage* dst=NULL;
#define max_corners 100
int thresh=134;
void on_trackbar(int thresh)
{
  cvThreshold(psrc,bing,thresh,255,CV_THRESH_BINARY_INV);
   
  cvShowImage("bing",bing);
}

 main()

  {

   
double scale=0.46;
int mode=CV_RETR_EXTERNAL;//提取轮廓模式
int contours_num=0,contours_nums=0;//提取的轮廓数目
// CvScalar external_color;//绘制轮廓线的颜色
CvMemStorage* storage=cvCreateMemStorage(0);
CvSeq* contour=0;//存储提取轮廓的序列指针
CvSize bin_cvsize;
  CvSize bing_cvsize;
CvSize psrc_cvsize;

src=cvLoadImage("020.jpg",-1);
bin_cvsize.width=(int)(src->width*scale);
bin_cvsize.height=(int)(src->height*scale);
bin=cvCreateImage(bin_cvsize,src->depth,src->nChannels);
cvResize(src,bin,CV_INTER_LINEAR);
cvNamedWindow("bin",CV_WINDOW_AUTOSIZE);
  cvShowImage("bin",bin);

   
  dst=cvLoadImage("020.jpg",0);
  bing_cvsize.width=(int)(dst->width*scale);
  bing_cvsize.height=(int)(dst->height*scale);
  bing=cvCreateImage(bing_cvsize,dst->depth,dst->nChannels);
  cvResize(dst,bing,CV_INTER_LINEAR);
  psrc_cvsize.width=(int)(dst->width*scale);
  psrc_cvsize.height=(int)(dst->height*scale);
  psrc=cvCreateImage(psrc_cvsize,dst->depth,dst->nChannels);
  cvResize(dst,psrc,CV_INTER_LINEAR);
  cvNamedWindow("bing",CV_WINDOW_AUTOSIZE);  
  cvCreateTrackbar("threshold","bing",&thresh,255,on_trackbar);// 滚动条设置
  on_trackbar(thresh); 
  cvWaitKey(0);//等待按键
  IplImage *Rol,*Rol_gray;//定义中间指针,指向感兴趣的区域
  CvRect rect;//定义一个矩形,用来记录轮廓的矩形区域
  cvFindContours(bing,storage,&contour,sizeof(CvContour),CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
  for(;contour;contour=contour->h_next)
{
int x,y;
if(contour->total<300)
  continue;
//标记箱体区域
cvDrawContours(bin,contour,CV_RGB(255,0,0),CV_RGB(255,0,0),0,1,8,cvPoint(0,0));
//显示标记后的图像
cvNamedWindow("markImage",CV_WINDOW_AUTOSIZE);
cvShowImage("markImage",bin);
   
/*cout<<"最高点坐标:"<<&contour[0].x<<" "<<&contour[0].y<<endl;*/
  rect= ((CvContour*)contour)->rect;
  cvSetImageROI(bin,rect);
  Rol = cvCreateImage( cvSize(rect.width, rect.height), bin->depth, bin->nChannels );
  Rol_gray = cvCreateImage( cvSize(rect.width, rect.height), bing->depth, bing->nChannels );

  cvCopy(bin,Rol);

  cvNamedWindow( "Rol", CV_WINDOW_AUTOSIZE ); //创建窗口
  cvShowImage( "Rol", Rol); //显示图像
  cvWaitKey(0); //等待按键
  cvDestroyWindow( "markImage" );
  cvDestroyWindow( "Rol" );
  
  cvCvtColor(Rol,Rol_gray,CV_BGR2GRAY);//将彩色图转灰度图

//以固定阈值将图像二值化
  cvThreshold(Rol_gray,Rol_gray,120,255, CV_THRESH_BINARY );




//有rent得到矩形的四角的坐标
  CvPoint pt1, pt2;
  pt1.x = rect.x;
  pt1.y = rect.y;
  pt2.x = rect.x + rect.width;
  pt2.y = rect.y + rect.height;

  //将rol区分割成12个部分,以便确定各个物体的位置
  cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(rect.width,0.34*rect.height),cvScalar(255,255,255),1);  
  cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(rect.width,0.67*rect.height),cvScalar(255,255,255),1);
  cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(rect.width,rect.height),cvScalar(255,255,255),1);  

  cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(0.25*rect.width,rect.height),cvScalar(255,255,255),1);  
  cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(0.5*rect.width,rect.height),cvScalar(255,255,255),1);  
  cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(0.75*rect.width,rect.height),cvScalar(255,255,255),1);

  cvNamedWindow( "Rolgray", 1 ); //创建窗口
  cvShowImage( "Rolgray", Rol_gray); //显示图像
  int i,j,k,sum = 0;

  int height,width,step,Channels;

  height=Rol_gray->height;
  width=Rol_gray->width;
  step =Rol_gray->widthStep;

  uchar *data = (uchar*)Rol_gray->imageData;

  for(i=0;i<0.34*height;i++) for(j=0;j<0.25*width;j++)
{
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<1200)
  printf("(1,1)位置缺");
  sum = 0;

  for(i=0;i<0.34*height;i++) for(j=0.25*width;j<0.5*width;j++)
  {
  if(data[i*step+j]>200)
  sum++;

  }
  if(sum<1100)
  printf("(1,2)位置缺");
  sum = 0;

  for(i=0;i<0.34*height;i++) for(j=0.5*width;j<0.75*width;j++)
  {
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<1000)
  printf("(1,3)位置缺");
  sum = 0;

  for(i=0;i<0.34*height;i++) for(j=0.75*width;j<width;j++)
  {
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<1200)
  printf("(1,4)位置缺");
  sum = 0;

  for(i=0.34*height;i<0.67*height;i++) for(j=0;j<0.25*width;j++)
  {
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<1100)
  printf("(2,1)位置缺");
  sum = 0;

  for(i=0.34*height;i<0.67*height;i++) for(j=0.25*width;j<0.5*width;j++)
  {
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<1000)
  printf("(2,2)位置缺");
  sum = 0;

  for(i=0.34*height;i<0.67*height;i++) for(j=0.5*width;j<0.75*width;j++)
  {
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<1000)
  printf("(2,3)位置缺");
  sum = 0;

  for(i=0.34*height;i<0.67*height;i++) for(j=0.75*width;j<width;j++)
  {
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<1100)
  printf("(2,4)位置缺");


  sum = 0;

  for(i=0.67*height;i<height;i++) for(j=0;j<0.25*width;j++)
{
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<1200)
  printf("(3,1)位置缺");
  sum = 0;

  for(i=0.67*height;i<height;i++) for(j=0.25*width;j<0.5*width;j++)
  {
  if(data[i*step+j]>200)
  sum++;

  }
  if(sum<1100)
  printf("(3,2)位置缺");
  sum = 0;

  for(i=0.67*height;i<height;i++) for(j=0.5*width;j<0.75*width;j++)
  {
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<1100)
  printf("(3,3)位置缺");
  sum = 0;

  for(i=0.67*height;i<height;i++) for(j=0.75*width;j<width;j++)
{
  if(data[i*step+j]>200)
  sum++;
  }
  if(sum<2300)
printf("(3,4)位置缺");
cvWaitKey(0);
  cvDestroyWindow( "Rolgray" );  
cvDestroyWindow("src");
cvDestroyWindow("dst");
  cvReleaseImage(&src);
  cvReleaseImage(&psrc);
  cvReleaseImage(&bin);
cvReleaseImage(&dst);
cvReleaseMemStorage(&storage);
  return 0;
   
}



[解决办法]
看不见图片

热点排行