MIL与opencv的转化

/**/ /* This is a standalone program. Pass an image name as a first parameter of the program.
   Switch between standard and probabilistic Hough transform by changing "#if 1" to "#if 0" and back 
*/

#include 
< cv.h >
#include 
< highgui.h >
#include 
< math.h >
#include 
< stdio.h >
#include 
< mil.h >  
// cxcore.lib cv.lib highgui.lib mil.lib milcor.lib milgen.lib milmet2.lib milcor2.lib milmet2d.lib milmet2cl.lib milpul.lib milorion.lib mil1394.lib milvga.lib 
#define  CHECK_EXIT(x) {if(!(x)){printf("Error %s\n",#x);exit(0);}}

class  CMIL_CV
{
    MIL_ID MilApplication,                           
/**//* Application identifier.   */
          MilSystem,                                
/**//* System identifier.        */
          
//MilDisplay,                               /* Display identifier.       */ 
          MilDigitizer,                             /**//* Digitizer identifier.     */ 
          MilImageDisp;                             
/**//* Image buffer identifier.  */
           
    
static void MouseCallback (int eventint x, int y, int flags, void* param) 
    
{
        
if(event==CV_EVENT_LBUTTONDOWN)//CV_EVENT_MOUSEMOVE)
        {
            IplImage 
*img=*(IplImage**)param;//为什么直接传param就不行
            CHECK_EXIT(CV_IS_IMAGE(img));
            CvFont ft
=cvFont(2,1);
            
char s[100];
            sprintf(s,
"%3d,%3d %d",x,y,CV_IMAGE_ELEM(img,BYTE,y,x));;
            cvPutText(img,s,cvPoint(
100,100),&ft,CV_RGB(0,0,0));
            printf(
"%s\n",s);
        }

    }



public:
    
enum {
        Mil_CH0
=M_CH0,
        Mil_CH1
=M_CH1,
    }
;
    BOOL MilGetImage(
int Channel,IplImage * &dst)
    
{
        
try
        
{
            MbufClear(MilImageDisp, 
0);
            MdigChannel(MilDigitizer, Channel);
            MdigGrab(MilDigitizer, MilImageDisp);
            
            
int w=MbufInquire(MilImageDisp,M_SIZE_X,M_NULL);;
            
int h=MbufInquire(MilImageDisp,M_SIZE_Y,M_NULL);;
            
int band=MbufInquire(MilImageDisp,M_SIZE_BAND,M_NULL);;
            
int pitch=MbufInquire(MilImageDisp,M_PITCH_BYTE,M_NULL);;
        
//    IplImage *dst=cvCreateImage(cvSize(w,h),8,band);
            if(!dst)
                dst
=cvCreateImage(cvSize(w,h),8,band);
            
//            CHECK_EXIT(dst->width==w && dst->height==h && dst->nChannels=band);
            char* p=dst->imageData;
            MbufGet(MilImageDisp,p);
            dst
->origin = IPL_ORIGIN_TL;
            
//cvFlip(dst,dst,0);
        }

        
catch()
        
{
            
return FALSE; 
        }


        
return TRUE;
    }
;
    
    BOOL MilOpen(
char *DCF_NAME)
    
{
        
try
        
{
            MappAlloc(M_DEFAULT, 
&MilApplication);
            MsysAlloc(M_SYSTEM_METEOR_II, M_DEF_SYSTEM_NUM, M_SETUP, 
&MilSystem);
            
//MdispAlloc(MilSystem, M_DEFAULT, M_DEF_DISPLAY_FORMAT, M_DEFAULT, &MilDisplay);
            MdigAlloc(MilSystem, M_DEFAULT, DCF_NAME, M_DEFAULT, &MilDigitizer);
            
            printf(
" Allocate a display buffer, clear it and display it. \n");
            MbufAllocColor(MilSystem,
                MdigInquire(MilDigitizer, M_SIZE_BAND, M_NULL),
                (
long) (MdigInquire(MilDigitizer, M_SIZE_X, M_NULL)),
                (
long) (MdigInquire(MilDigitizer, M_SIZE_Y, M_NULL)),
                
8L+M_UNSIGNED, 
                M_IMAGE
+M_GRAB+M_DISP,
                
&MilImageDisp);
            MdigControl(MilDigitizer, M_GRAB_MODE, M_SYNCHRONOUS);   
//must!!
            MdigControl(MilDigitizer, M_CAMERA_LOCK, M_ENABLE);//
            MbufClear(MilImageDisp, 0);
        }

        
catch()
        
{
            
return FALSE;
        }


        
return TRUE;
    }


    BOOL MilClose()
    
{
        
try{
            MbufFree(MilImageDisp);
            MdigFree(MilDigitizer);
            MsysFree(MilSystem);
            MappFree(MilApplication);  
        }
catch ({
            
return FALSE;
        }

        
return TRUE;
    }


    
void Test()
    
{
        CHECK_EXIT(MilOpen(
"H:/wqj/project/CMILL_CV/DCF6.dcf"));
        IplImage 
*img0=0;    //必须初始化为0
        IplImage *img1=0;
        
int Image_id=0;

        cvNamedWindow( 
"CH0"1 );
        cvNamedWindow( 
"CH1"1 );

        
        cvSetMouseCallback( 
"CH0", MouseCallback,&img0);
        cvSetMouseCallback( 
"CH1", MouseCallback,&img1);

        printf(
"Press g to save image in current directory.\n");
        printf(
"Press Esc to Exit.\n");
        
do
        
{
            
//奇怪,抓到的图都是CH0的//--要设置同步
            MilGetImage(M_CH0,img0);
            CHECK_EXIT(img0);
            
//printf("ImageSize %d*%d*%d\n",img0->width,img0->height,img0->nChannels);
            MilGetImage(M_CH1,img1);
            CHECK_EXIT(img1);

            
int c=cvWaitKey(100);
            
if(c=='g')
            
{
                
char img_name[100];
                sprintf(img_name,
"left_%.2d.bmp",Image_id);
                cvSaveImage(img_name,img0);

                sprintf(img_name,
"right_%.2d.bmp",Image_id);
                cvSaveImage(img_name,img1);

                printf(
"save image %d ok\n",Image_id);
                Image_id
++;
            }

            
else if(c==27)
                
break;

            cvShowImage( 
"CH0", img0 );
            cvShowImage( 
"CH1", img1 );
        }

        
while(1);
        printf(
"Exit..\n");
        CHECK_EXIT(MilClose());

        cvReleaseImage(
&img0);
        cvReleaseImage(
&img1);
    }

}
;
int  main( int  argc,  char **  argv)
{
    CMIL_CV milcv;
    milcv.Test();
    
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将一张普通的照片转化为动漫风格的图片,可以使用OpenCV中的风格迁移算法。具体步骤如下: 1. 加载需要转化的图片,并将其转换为彩色图像。 2. 加载预先训练好的风格图片,也需要将其转换为彩色图像。 3. 对原始图片和风格图片进行预处理,将其缩放到相同的大小。 4. 将预处理后的原始图片和风格图片输入到风格迁移算法中,得到转化后的图片。 5. 将转化后的图片保存到本地。 下面是Java代码实现转化图片为动漫风格的示例: ```java import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.photo.Photo; public class Cartoonizer { public static void main(String[] args) { // 加载需要转化的图片 Mat source = Imgcodecs.imread("src/main/resources/test.jpg"); // 加载预先训练好的风格图片 Mat style = Imgcodecs.imread("src/main/resources/style.jpg"); // 将原始图片和风格图片缩放到相同的大小 Size size = new Size(600, 600); Imgproc.resize(source, source, size); Imgproc.resize(style, style, size); // 将图片转换为L*a*b颜色空间 Mat sourceLab = new Mat(); Mat styleLab = new Mat(); Imgproc.cvtColor(source, sourceLab, Imgproc.COLOR_BGR2Lab); Imgproc.cvtColor(style, styleLab, Imgproc.COLOR_BGR2Lab); // 使用风格迁移算法 Mat cartoon = new Mat(); Photo.fastNlMeansDenoisingColored(source, source, 10, 10, 7, 21); Photo.fastNlMeansDenoisingColored(style, style, 10, 10, 7, 21); Photo.stylization(source, cartoon, 60, 0.45f); // 将图片转换回BGR颜色空间 Imgproc.cvtColor(cartoon, cartoon, Imgproc.COLOR_Lab2BGR); // 保存转化后的图片 Imgcodecs.imwrite("src/main/resources/cartoon.jpg", cartoon); } } ``` 这个示例使用的是Fast Non-Local Means Denoising和Stylization两个函数进行风格迁移,可以根据需要使用其他的函数进行风格迁移。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值