如何用c++在opencv中在鼠标指定的位置输入文字,能序列化

如何用c++在opencv中在鼠标指定的位置输入文字,能序列化,第1张

代码一:点击时显示坐标,鼠标移动时不显示。

[cpp]

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

IplImage* src=0

void on_mouse( int event, int x, int y, int flags, void* ustc)

{

CvFont font

cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA)

if( event == CV_EVENT_LBUTTONDOWN )

{

CvPoint pt = cvPoint(x,y)

char temp[16]

sprintf(temp,"(%d,%d)",pt.x,pt.y)

cvPutText(src,temp, pt, &font, cvScalar(255, 255, 255, 0))

cvCircle( src, pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 )

cvShowImage( "src", src )

}

}

int main()

{

src=cvLoadImage("lena.jpg",1)

cvNamedWindow("src",1)

cvSetMouseCallback( "src", on_mouse, 0 )

cvShowImage("src",src)

cvWaitKey(0)

cvDestroyAllWindows()

cvReleaseImage(&src)

return 0

}

代码二:鼠标移动时显示坐标,点击时不显示坐标

[cpp]

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

IplImage* src=0

IplImage* dst=0

void on_mouse( int event, int x, int y, int flags, void* ustc)

{

#include <cv.h>#include <highgui.h>int main(int argc, char **argv)

{

    CvCapture* capture = NULL

    capture = cvCreateFileCapture("红动中国设计网视频素材2185.avi")    if (!capture) return -1    //获取视频的第一帧 并存在bgr_frame

    IplImage *bgr_frame = cvQueryFrame(capture)    //获得视频的总帧数 CV_CAP_PROP_FPS 帧率

    double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS) 

    //获得原始视频的高度和宽度

    CvSize size = cvSize((int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),

        (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT))    ///创建一个视频文件参数分别表示  新建视频的名称 视频压缩的编码格式 新建视频的帧率 新建视频的图像大小

    CvVideoWriter *writer = cvCreateVideoWriter("1ai.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size)    //创建首地址 并分配存储空间

    IplImage* logpolar_frame = cvCreateImage(size, IPL_DEPTH_8U, 3)    // 获取视频的下一帧

    while ((bgr_frame = cvQueryFrame(capture)) != NULL)

    {        //将视频从笛卡尔坐标系转到极坐标系 参数分别表示 输入图像 输出图像 变换中心 尺度参数 填充输出图像所有参数 + CV_INTER_LINEAR 表示双线性参值(具体什么意思)

        cvLogPolar(bgr_frame, logpolar_frame, cvPoint2D32f(bgr_frame->width / 2, bgr_frame->height / 2), 80, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS)        //将获取到的每一帧从笛卡尔坐标系转到极坐标系后的参数 存到新建的视频文件        cvWriteFrame(writer, logpolar_frame)        //将获取的视频通过mainwin窗口进行展示

        cvShowImage("mainwin", logpolar_frame)        char c = cvWaitKey(33)        //ESC 默认退出

        if (c == 27) break

    }    //释放程序中申请的空间

    cvReleaseVideoWriter(&writer)

    cvReleaseImage(&logpolar_frame)

    cvReleaseCapture(&capture)    return(0)

}

建议还是用pyqt吧~网上很多文档,wx怎么都感觉麻烦,而且维护也不好~

况且pyqt本身的demos就可以参考到一定水平了!

第一次用pyqt做线程和sleep的时候用的是py自带的,能运行,但是经常出错

后来发现必须用qt自己那个什么模式,给你参考一下

class T_login(QtCore.QThread):

def run(self):

self.emit(QtCore.SIGNAL(loginfun(QString)),fun)

self.dologin = T_login()

self.connect(self.dologin, QtCore.SIGNAL(loginfun(QString)), self.do_login)

其他的都差不多


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11899112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存