C++ 为什么在opencv中,在图像的一半(垂直方向)上执行成像操作

C++ 为什么在opencv中,在图像的一半(垂直方向)上执行成像操作,c++,opencv,image-processing,C++,Opencv,Image Processing,我正在使用opencv进行非常简单的操作,但我无法理解为什么会出现此错误/问题。操作图像直到图像的一半(垂直) matimg=imread(“/Users/tanmoy/Documents/345.jpg”); Mat输出=img.clone(); if(img.empty()) { cout因为您正在处理一个3通道图像(默认情况下加载imread),就像它是一个1通道图像一样(您正在使用.at访问它) 请确保处理灰度图像。请选择: 直接将其加载为灰度: Mat img = imread("/U

我正在使用opencv进行非常简单的操作,但我无法理解为什么会出现此错误/问题。操作图像直到图像的一半(垂直)

matimg=imread(“/Users/tanmoy/Documents/345.jpg”);
Mat输出=img.clone();
if(img.empty())
{

cout因为您正在处理一个3通道图像(默认情况下加载
imread
),就像它是一个1通道图像一样(您正在使用
.at
访问它)

请确保处理灰度图像。请选择:

  • 直接将其加载为灰度:

    Mat img = imread("/Users/tanmoy/Documents/345.jpg", IMREAD_GRAYSCALE);
    Mat output = img.clone();
    
    Mat img = imread("/Users/tanmoy/Documents/345.jpg"); // Default loads a 3 channel image
    cvtColor(img, img, COLOR_BGR2GRAY);
    Mat output = img.clone();
    
  • 转换为灰度:

    Mat img = imread("/Users/tanmoy/Documents/345.jpg", IMREAD_GRAYSCALE);
    Mat output = img.clone();
    
    Mat img = imread("/Users/tanmoy/Documents/345.jpg"); // Default loads a 3 channel image
    cvtColor(img, img, COLOR_BGR2GRAY);
    Mat output = img.clone();
    

  • 请注意,您可以避免显式的
    for
    循环:

  • 使用:

  • 使用矩阵二进制运算:

    Mat output = img > 128;
    

  • 请参见@user3465857,很高兴这有帮助;D请记住接受答案。抱歉,延迟接受答案……现在我做到了:)