_Devin__ 2016-12-11 02:16 采纳率: 0%
浏览 5425
已结题

OpenCV中Mat像素访问和赋值的问题

想调用opencv中的inpaint函数。关于inpaintMask,我想通过遍历srcImage中的每一个像素,当这个像素的三个通道值皆为0时,将inpaintMask该位置像素值置非0。

可是遍历和赋值像素的时候,VS会报错,麻烦各位帮我看看问题所在,谢谢!代码附在了下面,很简单,不难看懂!

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/photo/photo.hpp>

#include <iostream>
using namespace cv;
using namespace std;


#define WINDOW_NAME1 "【原始图】"
#define WINDOW_NAME2 "【修补后】"

Mat srcImage1, inpaintMask;
int main(int argc, char ** argv)
{
    Mat srcImage = imread("1.jpg");
    if(!srcImage.data)
    {
        printf("读取照片错误,请确定目录下是否有imread函数指定的图片存在!\n");
        return false;
    }
    srcImage1 = srcImage.clone();
    inpaintMask = Mat::zeros(srcImage1.size(), CV_8UC1);

    for(int u1 = 0; u1 < srcImage.rows; u1++)
        for(int v1 = 0; v1 < srcImage.cols; v1++)
        {
            if( 
                srcImage.at<Vec3b>(u1,v1)[0] == 0 &&
                srcImage.at<Vec3b>(u1,v1)[1] == 0 &&
                srcImage.at<Vec3b>(u1,v1)[2] == 0 )
                {
                    inpaintMask.at<Vec3b>(u1,v1)[0] = 255;
                }

        }

    // 显示原图

    imshow(WINDOW_NAME1, srcImage1);
        Mat inpaintedImage;
        inpaint(srcImage1, inpaintMask, inpaintedImage, 3, INPAINT_TELEA);
        imshow(WINDOW_NAME2, inpaintedImage);
        waitKey();
        return 0;
}
  • 写回答

2条回答 默认 最新

  • 「已注销」 2016-12-11 02:55
    关注

    cv_8UC1改成srcImage.type()试试,我也是初学者,不是很明白,

    评论

报告相同问题?

悬赏问题

  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败