cvset*d-在实现鼠标绘图时,使用cvSet2D来画轨迹,为什么在边缘处出界。求指点。

问题描述

在实现鼠标绘图时,使用cvSet2D来画轨迹,为什么在边缘处出界。求指点。

下面是代码,

/*
创建白色图像,通过鼠标左键绘图,右键实现橡皮擦功能
*/

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

bool LFlag = false;
bool RFlag = false;
Point point ;

void onMouseCallback(int event, int x , int y , int flags, void *param)
{
    IplImage *img = (IplImage *)param;
    Point point1, point2;
    switch (event)
    {
        //鼠标左键按下获取当前位置,设置标记
    case CV_EVENT_LBUTTONDOWN:
        LFlag = true;
        point = cvPoint(x, y);
        break;
    case CV_EVENT_LBUTTONUP:
        LFlag = false;

        break;
    case CV_EVENT_RBUTTONDOWN:
        RFlag = true;
        point = Point(x, y);
        cvCircle(img,point,5,CV_RGB(255,255,255),-1);
        break;
    case CV_EVENT_RBUTTONUP:
        RFlag = false;

        break;
    case CV_EVENT_MOUSEMOVE:
        point = Point(x, y);
        break;
    }
    if (LFlag)
    {

        cvSet2D(img,point.y,point.x,CV_RGB(255,0,0));
    }else if (RFlag)
    {
        cvCircle(img, point, 5, CV_RGB(255,255,255),-1);
    }
}

int main()
{
    IplImage *pImage = cvCreateImage(cvSize(500,500), 8, 3);
    cvRectangle(pImage, cvPoint(0,0), cvPoint(500,500), CV_RGB(255,255,255),-1);
    IplImage *temp = cvCloneImage(pImage);

    namedWindow("简易画板");
    cvSetMouseCallback("简易画板", onMouseCallback, (void *)pImage);

    while (1)
    {
        cvCopy(pImage, temp);

        cvShowImage("简易画板", temp);
        if(waitKey(1)==27)
        {
            break;
        }
    }

    return 0;
}

解决方案

数组越界了,下面那个函数应该是画出来了但是没有显示,具体函数实现得查查文档

解决方案二:

你说的边界处出界怎么个意思,发个图片上来看看啊

解决方案三:

运行出错的图片

出错的地方是if里的cvSet2D(img,point.y,point.x,CV_RGB(255,0,0)); 每次鼠标移到边界时就出错。
当我用cvCircle(img, point, 2, CV_RGB(255,0,0),-1);替换时不发生错误。
我想问一下是为什么。

时间: 2024-10-02 00:08:50

cvset*d-在实现鼠标绘图时,使用cvSet2D来画轨迹,为什么在边缘处出界。求指点。的相关文章

VB鼠标绘图基础资料总结

VB鼠标绘图基础资料总结 鉴于上半年编写过鼠标绘图的程序,在此将以前搜集的资料总结一下,给那些以前和我一样到处搜索的VB爱好者们一点方便,同时欢迎交流和指正.这里我尽量写的罗嗦又罗嗦一些,希望大家不要怪我.因为我们很多的资料都是理论性太强了,实用性或者说教人怎么用,太弱了.我希望能够罗嗦明白一点.我也是一个VB刚刚入门的人,把有限的经验写出来和大家分享. 前言鼠标绘图可以说是每一个VB编程者都想必定要尝试和锻炼的一个项目.学会了鼠标绘图,你就学会了Windows的鼠标操作,屏幕模映射模式,绘图模

VB实现鼠标绘图实例代码_vb

本文所述为VB实现鼠标绘图的实例,该实例实现线条颜色和线宽可自设,当按下鼠标按键时绘图开始并记录最初的起点,如果不是处在绘图状态则退出该过程,如果处在绘图状态则从起点到目前鼠标所在点绘制直线,然后将当前鼠标所在点作为新的起点,当释放鼠标按键时绘图结束. 具体的功能代码如下: VERSION 5.00 Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx" Begin VB.For

C#鼠标绘图程序的问题

问题描述 做了一个绘图程序在鼠标移动时候能画出线来,但是为了使鼠标的移动不会产生很多条线,只有一条线跟着鼠标在画.在MouseMove事件中画线之前加了这个方法graphics.clear()这样解决了留下鼠标轨迹的问题,但是画第2条线的时候第一条线也会被清除掉,请问怎么解决这问题 解决方案 解决方案二:第一种方法:画第二条线之前,使用背景色重画第一条线.(不推荐)第二种方法:在类中定义记录需要画线的数据的成员,在MouseMove消息中,更新数据,执行Invalidate();在Paint事件

y轴-RRDTool (JRobin)绘图时指定Y轴阀值

问题描述 RRDTool (JRobin)绘图时指定Y轴阀值 比如,设定Y轴的阀值,小于这个值的时候画出的area是绿色,大于这个值画出的area是红色,谢谢

Coreldraw绘图时出现“该程序出现非法操作”

问:用Coreldraw绘图时突然出现"该程序出现非法操作",该如何解决? 在Coreldraw里绘图的时候为什么突然会出现"该程序执行了非法操作,需要关闭"呢?如何解决? 答: 这恐怕是最令Coreldraw绘图者头痛的毛病了,不过Coreldraw12以后的版本很少出现这种情况,Coreldraw 9与Coreldraw 10出现这种情况最为普遍. 通常原因是由于操作了过大的文件,应用了过于复杂的变形,大位图的点阵图滤镜效果,以及过多的文字样式以及操作过快造成的

css实现鼠标悬停时滑出层提示的方法

 本文实例讲述了css实现鼠标悬停时滑出层提示的方法.分享给大家供大家参考.具体分析如下: 这是一个简单的鼠标悬停提示特效,类似于alt标签,不过这一种是用纯CSS实现,扩展性好,而且在提示的层里可以加入图片或其它布局,这个要根据你的需要了.   代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tran

jQuery当鼠标悬停时放大图片的效果实例

这个效果最初源于小敏同志的一个想法,刚开始做的时候只能实现弹出的图片是固定的,不能随鼠标移动,最后加以改善,终于实现了比较理想的效果.今天就把制作该效果的经验与大家一同分享.先看看最终效果演示: HTML结构部分: 先编写一个无序列表的结构,a标签中的img标签用来存放小图片,a标签添加一个rel属性,用来存放大图片的路径. 复制代码 代码如下: <UL id=gallery sizcache="6" sizset="7">  <LI sizcac

js实现鼠标经过时图片滚动停止的方法

 这篇文章主要介绍了js实现鼠标经过时图片滚动停止的方法,可实现js滚动特效中的鼠标悬停停止图片滚动的功能,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了js实现鼠标经过时图片滚动停止的方法.分享给大家供大家参考.具体实现方法如下:   代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t

鼠标移动时的坐标问题

问题描述 鼠标移动时的坐标问题 C#编程,我建了个窗体,里面放了几个按钮,我想实现鼠标移动时显示鼠标坐标的功能,但是当鼠标移动到按钮上时,就不能显示当前所在窗体的坐标了,怎么做才能让鼠标移动时忽略按钮继续显示鼠标的坐标呢? 解决方案 用API去取.GetCursorPos http://blog.163.com/very_apple/blog/static/277592362013417994385/ 解决方案二: 关于鼠标坐标问题鼠标坐标问题关于uCGUI的鼠标移动时留下印子的问题 解决方案三