openCV像素點處理

來源:互聯網
上載者:User

轉自:http://blog.csdn.net/hxgqh/archive/2011/02/23/6202001.aspx

獲得像素點的值便可以更加靈活的進行影像處理,在OpenCV裡可以通過cvGet2D()和cvSet2D()兩個函數加上一個CvScalar結構體做到。
OpenCV中,CvScalar結構為:
typedef struct CvScalar
{
    double val[4];
}
CvScalar;

4個double型變數,演算法處理時不至於被強制類型轉換而降低精度了。
再來看讀寫函數的定義:

cvGet2D 獲得某個點的值, idx0=hight 行值, idx1=width 列值。
CVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );

cvSet2D 給某個點賦值。
CVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );

有上可見,cvGet2D的傳回型別和cvSet2D中value的類型都是CvScalar,這樣定義一個CvScalar變數再調用函數就OK了。

OpenCV中像素點讀寫例子:

int main(int argc, char **argv)
{
    IplImage *img = cvLoadImage(argv[1], 1);
    CvScalar pixel;
    for (int i = 0; i < img->height; ++i)
    {
        for (int j = 0; j < img->width; ++j)
        {
            //獲得像素的RGB值並顯示, 注意記憶體中儲存順序是BGR
            pixel = cvGet2D(img, i, j);
            printf("B=%f,G=%f,R=%f/t", pixel.val[0], pixel.val[1], pixel.val[2]);
            //修改各點的值
            pixel.val[0] = 0;
            pixel.val[1] = 0;
            pixel.val[2] = 0;
            cvSet2D(img, i, j, pixel);
        }
    }
    cvNamedWindow("image", 1);
    cvShowImage("image", img);
    cvWaitKey(0);
    cvDestroyWindow("image");
    cvReleaseImage(&img);
    return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.