【问题标题】:OpenCV: Fetch color, intensity and texture of an imageOpenCV:获取图像的颜色、强度和纹理
【发布时间】:2010-12-05 02:14:57
【问题描述】:

我是 OpenCV 新手,刚刚开始筛选 API。我打算获取构成图像的每个像素的颜色、强度和纹理值。我正在摆弄结构 - IplImage 开始,但没有取得太大进展。

请告诉我有什么方法可以做到这一点。

干杯

【问题讨论】:

    标签: image-processing opencv


    【解决方案1】:

    你试过OpenCV 2.0吗?他们有一个新的 C++ 接口,使事情变得更容易。您可以使用他们的新 Mat 类来加载图像、有效地访问像素等。它比 IplImage 有趣得多。我使用 \doc\opencv.pdf 作为我需要的任何东西的参考。它有教程和带有新 C++ 接口的示例等 - 足以让您入门。

    如果您还有具体的 OpenCV 问题,请随时提问。

    这里有一些演示代码可以帮助您入门:(我使用了 cv 命名空间):

        // Load the image (looks like MATLAB :) ? )
        Mat M = imread("h:\\lena.bmp");
        // Display
        namedWindow("Lena",CV_WINDOW_AUTOSIZE);
        imshow("Lena",M);
        waitKey();  
    
        // Crop out rectangle from (100,100) of size (200,200) of the red channel 
        const int offset[2] = {100,100};
        const int dims[2] = {200,200};  
        Mat Red(dims[0],dims[1],CV_8UC1);
    
        // Read it from M into Red
        uchar* lena = M.data;
        for(int i=0;i<dims[0];++i)
            for(int j=0;j<dims[0];++j)
            {
                // P = i*rows*channels + j*channels + c
                Red.at<uchar>(i,j) = *(lena + (i+offset[0])*M.rows*M.channels() + (j+offset[1])*M.channels()+0);
            }
    
        //Display
        namedWindow("RedRect",CV_WINDOW_AUTOSIZE);
        imshow("RedRect",Red);
        waitKey();
    

    【讨论】:

    • 谢谢雅各布。这对我来说看起来很有希望。但是我在我们实验室的 Red Hat 机器上安装了 OpenCV,并且想知道如何找到它的版本。 rpm -qa opencv-devel 是否足以查找版本信息?我尝试查看文档(即常见问题解答、许可证、自述文件),它们是安装的一部分,但没有提及版本。有什么线索吗?我尝试编译(通过包含 cv.h 和 highgui.h)你的 sn-p,但它说 - 'Mat' 没有在这个范围内声明。我是因为没有安装最新版本而缺少标题还是它?
    • 版本方面,我从他们的在线 SVN 存储库中检查了 OpenCV,并使用 CMake 进行了编译。
    • 另外,包括 #include &lt;opencv2/opencv.hpp&gt; 而不是旧标题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多