[英]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.