QT5.12+opencv4.0.1 Cielab空间 像素颜色信息

QT5.12+opencv4.0.1 Cielab空间 鼠标点击获取像素颜色信息

opencv路径配置

使用vs2015编译,而非Cmake,只需 加入bin文件的路径:右击计算机>>系统属性>>高级>>环境变量>>path 添加opencv bin文件的路径;

在这里插入图片描述
在qt项目的pro文件中链接库,添加以下代码(路径因人而异,看一下include和lib文件夹的位置),库添加要用的就行。

INCLUDEPATH+=F:/install/include \
    F:/install/include/opencv2
LIBS+=-LF:/install/x64/vc14/lib \
    -lopencv_calib3d401d \
    -lopencv_core401d \
    -lopencv_dnn401d \
    -lopencv_features2d401d \
    -lopencv_flann401d \
    -lopencv_gapi401d \
    -lopencv_highgui401d \
    -lopencv_imgcodecs401d \
    -lopencv_imgproc401d \
    -lopencv_objdetect401d \
    -lopencv_photo401d \
    -lopencv_stitching401d \
    -lopencv_video401d \
    -lopencv_videoio401d \


使用摄像头以及色彩转换

主要功能:鼠标点击图片,返回当前位置的lab的值。主要是有些懒,不想一张张图测试,找了个摄像头隔几秒拍一帧,看看各部分的lab值;
基本思路是:启用摄像头>转换将当前帧>转换到Cielab空间>启用鼠标回调函数
使用循环,每两秒拍一张,更改waitkey()数值可以等待更久;
main函数:
{
Mat frame,tran,test;
Point p;
int i=0;
cap>>frame;
frame.convertTo(test, CV_32FC3, 1.0 / 255, 0);

{
Mat frame,tran,test;
Point p;
int i=0;
cap>>frame;
frame.convertTo(test,CV_32FC3,1.0/255.0);
while(i!=40)
imshow("orign",test);
tran=Mat::zeros(test.size(),CV_32FC3);
cvtColor(test,tran,COLOR_BGR2Lab);

setMouseCallback("display",my_mouse_callback,(void*)&tran);
imshow("display",tran);
waitKey(2000);
i++;
}
return 0;
}

鼠标回调函数:
鼠标左键点击后,会将当前像素的l,a,b值输出,以及当前位置;

void my_mouse_callback(int event,int x, int y, int flags, void *ptr)
{
    Mat m_pic;


    m_pic=*(Mat*)ptr;

    Point p(x,y);
    switch (event)
    {
        case EVENT_LBUTTONDOWN:
            {
              cout<<"l="<<m_pic.at<Vec3f>(p)[0]<<endl;
              cout<<"a="<<m_pic.at<Vec3f>(p)[1]<<endl;
              cout<<"b="<<m_pic.at<Vec3f>(p)[2]<<endl;
              cout << "at(" << x << "," << y << ") "<< endl;

                break;
            }
        default:
            break;
    }
}

包含头文件

#include "mainwindow.h"
#include <QApplication>

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/imgproc.hpp"

using namespace cv;
using namespace std;

void my_mouse_callback(int event,int x, int y, int flags, void *ptr);

输出结果:
有反应,但不知道是否正确:)

一些问题

输出的l,a,b值为浮点型,我觉得应该是整型才对,或者这个根本不是l,a,b的值,还是原来BGR空间的值。。。
新手上路,谢谢。

参考

https://blog.csdn.net/jiamuju84/article/details/52893239
https://stackoverflow.com/questions/15570431/opencv-return-value-from-mouse-callback-function

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值