【发布时间】:2017-12-28 14:47:45
【问题描述】:
我是 Joe,是本网站的新成员。 言归正传……我开始在 Visual Studio 上使用 openCV 库在 c++ 中编程,但我有一个关于图像像素的问题。 我写了一个代码来计算 alpha 通道的平均值(像素的第四个分量,除了 B、G、R 强度的值).. 在此处输入图像描述 我陷入了一个错误,我不知道如何解决它。 这是我的代码
#include "stdafx.h"
#include "opencv2\highgui\highgui.hpp"
#include "opencv2\core\core.hpp"
#include "opencv2\opencv.hpp"
using namespace cv;
using namespace std;
int main() {
Mat image;
image = imread("C:/Users/Joe/Desktop/prova/paesaggioLuminoso.jpg", 1);
namedWindow("Picture", WINDOW_AUTOSIZE);
imshow("Picture", image);
waitKey(0);
int averageAlpha = 0;
int partial = 0;
for (int i = 0; i < image.rows; i++) {
for (int j = 0; j < image.cols; j++) {
partial = partial +image.at<Vec4b>(i, j)[3];
if (i == image.rows - 1 && j == image.cols - 1) {
averageAlpha = partial / (image.rows * image.cols);
cout << "Average of alpha channel is " << averageAlpha << endl;
}
}
}
return 0;
}
请注意,如果我尝试计算 B 强度(或绿色或红色)的平均值,我的程序运行正确。
但是对于第四个频道,我收到以下错误消息: Secondo Progetto OpenCV.exe 中 0x00007FFC47603FB8 处未处理的异常:Microsoft C++ 异常:内存位置 0x000000162E2FF3E0 处的 cv::Exception。
在 cv::Mat::at,文件 c:\ 中断言失败 ((unsigned)(i1 * DataType<_tp>::channels) 1 * channels())) users\joe\desktop\joe\opencv\opencv\build\include\opencv2\core\mat.inl.hpp,第 1095 行
感谢您的帮助!祝你有美好的一天 !
编辑:这是我在评论中提到的错误
【问题讨论】:
-
“我写了一个代码来计算平均值”——重新发明
cv::mean? -
ups :)) 抱歉,我还是个编码新手!
-
更多理由让自己熟悉 OpenCV 文档并了解可用的功能类型以及在何处查找信息的要点。 ;)
-
谢谢你的帮助和你的心态!也许您知道为什么有时 Visual Studio 会在五分钟前正常工作的相同(相同!)代码上给我错误? :)
-
@Joe 在我看来就像您打开了一个 opencv 内部标头并意外删除了某些内容。我认为
typname应该是typename。我会说只是重新安装opencv
标签: c++ visual-studio opencv