代码之家  ›  专栏  ›  技术社区  ›  Arnkrishn

OpenCV:获取图像的颜色、强度和纹理

  •  2
  • Arnkrishn  · 技术社区  · 16 年前

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

    干杯

    1 回复  |  直到 16 年前
        1
  •  3
  •   Jacob    16 年前

    你试过了吗 OpenCV 2.0 ? 他们有一个新的C++接口,这使得事情变得简单多了。您可以使用他们新的Mat类加载图像,高效访问像素等。它比IplImage有趣得多。我使用\doc\opencv.pdf作为我需要的任何参考。它有教程,以及新的C++接口等的例子-足够多,让你开始。

    下面是一些演示代码,让您开始:(我使用了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();