【问题标题】:Change pixel data of a rectangle in opencv在opencv中更改矩形的像素数据
【发布时间】:2013-08-28 06:43:51
【问题描述】:

我使用下面的矩形数组来循环 Haar 分类器检测到的人脸:

for( int i = 0; i < (objects ? objects->total : 0 ); i++ )
{
    CvRect* r = ( CvRect* )cvGetSeqElem( objects, i );
    cvRectangle( frame, cvPoint( r->x, r->y ), cvPoint( r->x + r->width, r->y + r->height ),colors[i%1]);

}

但我想更改分类器中检测到的每个人脸的像素数据,即更改每个矩形的像素值:

CvRect* r;

我试过了:

for( int i = 0; i < (objects ? objects->total : 0 ); i++ )
{
 r[i];
for(int j = r->y; j < r->y + r->height; j++)
{
    for(int k = r->x; k < r->x + r->width; k++)
    {   
    frame->imageData[k*3] = 0;    
        frame->imageData[k*3+2] = 0;
     }
     }
     }

只保留面部的 G 通道,但表示未声明变量 'r'。

【问题讨论】:

    标签: c++ visual-c++ opencv


    【解决方案1】:

    在这个循环中:

    for( int i = 0; i < (objects ? objects->total : 0 ); i++ )
    {
        CvRect* r = ( CvRect* )cvGetSeqElem( objects, i );
        cvRectangle( frame, cvPoint( r->x, r->y ), ... );
    }
    

    正在使用正确初始化的临时局部变量r,而在此代码中:

    CvRect* r;
    
    for( int i = 0; i < (objects ? objects->total : 0 ); i++ )
    {
        r[i];
        for(int j = r->y; j < r->y + r->height; j++)
        {
            for(int k = r->x; k < r->x + r->width; k++)
            {   
                frame->imageData[k*3] = 0;    
                frame->imageData[k*3+2] = 0;
            }
        }
    }
    

    未初始化的指针 r 被视为一个数组,甚至在无意义的表达式中也使此代码无效。

    尝试用r = ( CvRect* )cvGetSeqElem( objects, i );替换r[i]

    【讨论】:

      【解决方案2】:

      使用新的图像实例作为 roi 指针。示例:

      Mat myimage(500,500,CV_8U,Scalar(255));
      imshow("image",myimage); //white image
      cvWaitKey();
      
      //Reference matrix
      Mat roi_img(myimage(cvRect(25,25,100,100)));
      
      roi_img.setTo(Scalar(0));
      imshow("image",myimage); //image has a black rect area.
      cvWaitKey();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-24
        • 2021-08-31
        • 2016-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多