簡體   English   中英

Opencv 2 Mat-運行時出錯

[英]Opencv 2 Mat- Error on runtime

我從圖像處理的基礎開始,我正在嘗試使用平均將RGB圖像轉換為灰度。

我的代碼是

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

#include<iostream>

using namespace cv;

int main()
{

    Mat image = imread("a.jpg");
    namedWindow("Original ");
    namedWindow("Grey");
    imshow("Original", image);  
    Mat grey;
    std::cout << "hello\n";
    for (int i = 0; i < image.rows; i++)
    {
        for (int j = 0; j < image.cols; j++)
        {
            grey.at<Vec3b>(i, j) = (image.at<Vec3b>(i, j)[0] + image.at<Vec3b>(i, j)[1] + image.at<Vec3b>(i, j)[2]);
        }
    }
    imshow("Grey", grey);
    return 0;   

}`

我認為Mat Gray在訪問for循環中的元素時存在一些問題。

你需要初始化grey

Mat grey(image.rows, image.cols, CV_8UC1);

然后,在處理過程中

    for (int j = 0; j < image.cols; j++)
    {
        grey.at<Vec3b>(i, j) = ((image.at<Vec3b>(i, j)[0] + image.at<Vec3b>(i, j)[1] + image.at<Vec3b>(i, j)[2]))/3;
    }

/3將為您提供真正的灰度值。

HTH

當然,你還沒有初始化它,所以它是空的,你無法訪問元素。

Mat grey = Mat::zeros(image.rows, image.cols, CV_8UC1); 應該解決它。

在訪問Mat的元素之前嘗試使用if語句:

if (grey.empty())
{
  std::cout << "Empty Mat!\n";
  return -1;
}

另一件事是添加圖像通道不是真正的格斗, 請看這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM