首页 > 其他分享 >opencv剪切图片

opencv剪切图片

时间:2024-01-15 16:55:53浏览次数:25  
标签:pre pt cur img opencv org 剪切 CV 图片

debug模式下:

包含include和lib

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(O2_3RD)\opencv\include;$(IncludePath)</IncludePath>
<LibraryPath>$(O2_3RD)\opencv\x64\vc11\lib;$(LibraryPath)</LibraryPath>
</PropertyGroup>

 

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

IplImage* org = 0;
IplImage* img = 0;
IplImage* tmp = 0;
IplImage* dst = 0;
void on_mouse(int event, int x, int y, int flags, void* ustc)
{
    static CvPoint pre_pt = { -1,-1 };
    static CvPoint cur_pt = { -1,-1 };
    CvFont font;
    cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);
    char temp[16];

    if (event == CV_EVENT_LBUTTONDOWN)
    {
        cvCopy(org, img);
        sprintf(temp, "(%d,%d)", x, y);
        pre_pt = cvPoint(x, y);
        cvPutText(img, temp, pre_pt, &font, cvScalar(0, 0, 0, 255));
        cvCircle(img, pre_pt, 3, cvScalar(255, 0, 0, 0), CV_FILLED, CV_AA, 0);
        cvShowImage("img", img);
        cvCopy(img, tmp);
    }
    else if (event == CV_EVENT_MOUSEMOVE && !(flags & CV_EVENT_FLAG_LBUTTON))
    {
        cvCopy(tmp, img);
        sprintf(temp, "(%d,%d)", x, y);
        cur_pt = cvPoint(x, y);
        cvPutText(img, temp, cur_pt, &font, cvScalar(0, 0, 0, 255));
        cvShowImage("img", img);
    }
    else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))
    {
        cvCopy(tmp, img);
        sprintf(temp, "(%d,%d)", x, y);
        cur_pt = cvPoint(x, y);
        cvPutText(img, temp, cur_pt, &font, cvScalar(0, 0, 0, 255));
        cvRectangle(img, pre_pt, cur_pt, cvScalar(0, 255, 0, 0), 1, 8, 0);
        cvShowImage("img", img);
    }
    else if (event == CV_EVENT_LBUTTONUP)
    {
        cvCopy(tmp, img);
        sprintf(temp, "(%d,%d)", x, y);
        cur_pt = cvPoint(x, y);
        cvPutText(img, temp, cur_pt, &font, cvScalar(0, 0, 0, 255));
        cvCircle(img, cur_pt, 3, cvScalar(255, 0, 0, 0), CV_FILLED, CV_AA, 0);
        cvRectangle(img, pre_pt, cur_pt, cvScalar(0, 255, 0, 0), 1, 8, 0);
        cvShowImage("img", img);
        cvCopy(img, tmp);
        int width = abs(pre_pt.x - cur_pt.x);
        int height = abs(pre_pt.y - cur_pt.y);
        if (width == 0 || height == 0)
        {
            cvDestroyWindow("dst");
            return;
        }
        dst = cvCreateImage(cvSize(width, height), org->depth, org->nChannels);
        CvRect rect;
        if (pre_pt.x < cur_pt.x && pre_pt.y < cur_pt.y)
        {
            rect = cvRect(pre_pt.x, pre_pt.y, width, height);
        }
        else if (pre_pt.x > cur_pt.x && pre_pt.y < cur_pt.y)
        {
            rect = cvRect(cur_pt.x, pre_pt.y, width, height);
        }
        else if (pre_pt.x > cur_pt.x && pre_pt.y > cur_pt.y)
        {
            rect = cvRect(cur_pt.x, cur_pt.y, width, height);
        }
        else if (pre_pt.x<cur_pt.x && pre_pt.y>cur_pt.y)
        {
            rect = cvRect(pre_pt.x, cur_pt.y, width, height);
        }
        cvSetImageROI(org, rect);
        cvCopy(org, dst);
        cvResetImageROI(org);
        cvDestroyWindow("dst");
        cvNamedWindow("dst", 1);
        cvShowImage("dst", dst);
        cvWaitKey(0);
        cvSaveImage("D:\\71253.jpg", dst);
    }
}
void CDlgXXXX::OnStnClickedStaticPic()
{
    CString strTxtImg_ = L"D:\\Picture1.jpg";
    string szTxtImg = CStringFun::wstring_to_string(strTxtImg_.GetBuffer());
    strTxtImg_.ReleaseBuffer();
    org = cvLoadImage("D:\\Picture1.jpg", 1);
    img = cvCloneImage(org);
    tmp = cvCloneImage(org);
    cvNamedWindow("img", 1);
    CRect rtPic;
    m_static_image_.GetWindowRect(&rtPic);
    cvMoveWindow("img", rtPic.left, rtPic.top);
    cvResizeWindow("img", rtPic.Width(), rtPic.Height());

    cvSetMouseCallback("img", on_mouse, 0);
    cvShowImage("img", img);
    
    cvWaitKey(0);
    cvDestroyAllWindows();
    cvReleaseImage(&org);
    cvReleaseImage(&img);
    cvReleaseImage(&tmp);
    cvReleaseImage(&dst);
}

 

标签:pre,pt,cur,img,opencv,org,剪切,CV,图片
From: https://www.cnblogs.com/XiHua/p/17965747

相关文章

  • 图片保存到数据库和从数据库读取图片并显示(C#)
    图片保存到数据库和从数据库读取图片并显示(C#) 图片保存到数据库的方法:       publicvoidimgToDB(stringsql)       {  //参数sql中要求保存的imge变量名称为@images           //调用方法如:imgToDB("updateUserPhotosetPhoto=@imageswhe......
  • QR二维码生成器源码(中间可插入小图片)
    QR二维码生成器源码(中间可插入小图片) 二维码终于火了,现在大街小巷大小商品广告上的二维码标签都随处可见,而且大都不是简单的纯二维码,而是中间有个性图标的二维码。我之前做了一个使用google开源项目zxing实现二维码、一维码编码解码的程序并开放了源码(用C#实现的条形码和二......
  • 请使用scss写一个util,用于方便创建毛玻璃特效的背景图片,支持文字在图片上显示,不被遮挡
    下面是一个使用SCSS编写的util,用于创建毛玻璃特效的背景图片,并确保文字不被遮挡。该util使用::before伪元素来创建毛玻璃效果,同时在伪元素上添加文字,以确保文字显示在图片上方。@mixinglassBackground($imageUrl,$textColor:#fff,$blurAmount:10px){position:re......
  • django练手(二十二):增加删除图片的功能
    一、功能描述缩略图下面增加图片名称和删除链接;点击删除链接发送post请求到后台,并传图片id;后台接收到id,把该id图片的is_active值置为false;刷新缩略图的div;刷新分页区域。二、功能实现修改app-models.py的avatar类,增加is_active字段,代码如下:#用户图标上传模型classAv......
  • Asp.Net怎么上传图片-基础教程
    aspx页面script方法内用于判断用户上传的文件是否为自己要求的格式和展示图片的方法body内定义一个图片框用于预览用户上传的图片一个上传文件的控件一个提交按钮代码如下Script代码:$(function(){$('#uploadImage').on('change',function(){var......
  • 图片分享
          ......
  • 图片特效/增强GUI程序
    程序下载地址:mendianyu/pictureConvert:图片特效/增强GUI程序,借助百度接口实现人像动漫化,模糊图片变清晰等等功能(github.com)图片特效/增强GUI程序借助百度接口实现人像动漫化,模糊图片变清晰等等功能程序介绍运行ImageConverterGul这个java文件进入程序页面可以选择图像特效......
  • opencv,ffmpeg 和 VLC的关系
    OpenCV、FFmpeg和VLC之间有着密切的关系。OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。它可以用于处理图像和视频数据。而FFmpeg是一个用于录制、转换和流媒体处理的多媒体框架,可以用于处理音频和视频文件。VLC是一个流行的开源媒体播放器,它使用了FFmpe......
  • OpenCV计算机视觉学习(15)——浅谈图像处理的饱和运算和取模运算
    如果需要其他图像处理的文章及代码,请移步小编的GitHub地址传送门:请点击我如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice本来在前面博客OpenCV计算机视觉学习(2)——图像算术运算&图像阈值(数值计算,掩膜mask操作,边界填充,二值化)里面已经学习了......
  • 小程序开发:笔记详情显示图片以及可以富文本编辑
    上文说到:把笔记列表的下拉刷新、上拉加载更多功能完成了。本文主要完成的功能项:页面显示图片、编辑时富文本编辑。现在的详情页是这样的: 图片还是个url。刚抽空把首页列表的无数据时展示提示的功能做了,大概样式如下: 而现在的编辑页面是这样的: 只是简单的文字编辑功能......