我想做一个取一张图的一部分,吧这部分存起来保存到一个目录下,请各位帮忙。最好贴代码。谢谢!

解决方案 »

  1.   

    看看opencv,一共3步
    1. load
    2. set ROI
    3. save
      

  2.   

    第一步:
    CDC MemDC;//定义一个DC
    用MemDC.CreateCompatibleDC创建一个兼容DC。
    用LoadImage将你的文件加载进来。HBitmap hBitmap=::LoadImage(NULL,"文件路径",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    用MemDC.SelObject将上面的hBitmap加载进DC中
    第二步:
    用BitBlt将你要的区域贴到MemDC中。
    第三步:
    写文件,这个代码比较长,将一个hBitmap位图对象写进文件的代码你可以看这个:http://blog.csdn.net/wltg2001/archive/2008/04/17/2300258.aspx
      

  3.   

    #include <cv.h>
    #include <highgui.h>
    #include "stdio.h"
    // ch3_ex3_12 image_name x y width height add# 
    int main( ) //图片选中区域每个点像素增加150(也可以选定指定通道增加像素150)
    {    IplImage* src;
        cvNamedWindow("Example3_12_pre", CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example3_12_post", CV_WINDOW_AUTOSIZE);  
        
    src=cvLoadImage("faceScene.jpg",1);  int z=src->nChannels;  printf("z=%d",z);      //图片是3通道的,即RGB        int x = 200;        //指定矩形区域的左上角x
    int y = 200;        //指定矩形区域的左上角y
    int width =400;     //指定矩形区域宽
    int height = 400;   //指定矩形区域高
    int add = 150;

    cvShowImage( "Example3_12_pre", src);
    cvSetImageROI(src, cvRect(x,y,width,height));

    cvAddS(src, cvScalar(add,0,0),src); //图片选中区域蓝色通道增加150
    cvAddS(src, cvScalar(0,add,0),src); //图片选中区域绿色通道增加150
    cvAddS(src, cvScalar(0,0,add),src); //图片选中区域红色通道增加150
    cvResetImageROI(src);     //保存区域
    cvShowImage( "Example3_12_post",src);
          cvWaitKey();
        
      cvReleaseImage( &src );
      cvDestroyWindow("Example3_12_pre");
      cvDestroyWindow("Example3_12_post");   
        return 0;
    }
      

  4.   

    int min=255;
    int flagx,flagy;
    for(int i=180; i<bm.bmHeight-180; i++) 

    for(int j=bm.bmWidth-180; j>180; j--) 

    pGreenDate[i*bm.bmWidth+j]=pData[i*nWidth+j*3+1];
    if (min>pData[i*nWidth+j*3+1])
    {
    min=pData[i*nWidth+j*3+1];
    flagx=j;
    flagy=i;
    }



    我想找到pData[i*nWidth+j*3+1]的值在某个区间内的所有的 i、j 都是多少
    应该怎么做啊
      

  5.   

    1、利用3楼的结果,然后用Ciamge类存。
    2、你如果借助了什么类库打开bmp,就用还类库的保存函数。在这自己,自己建立一副bmp。
      

  6.   

    1楼已经说的很清楚了,实在不会opencv的话,
    看看帮助文档同时参考下7楼很简单的
      

  7.   

    首先读入源图像的数据到一个矩阵pData中,
    然后根据你的需要读取一部分到另一个矩阵
    data中,然后将data写入到一个bmp文件中,
    其中,依次写BITMAPFILEHEADER、BITMAPINFOHEADER
    中的数据,最后将data数据写入。然后保存
    就ok了。