我和乔是我这个网站的新成员。 让我们谈谈......我开始使用visual studio上的openCV库用c ++编程,但我对图像的像素有疑问。 我写了一个代码来计算alpha通道的平均值(像素的foruth分量,以及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 ++异常:cv ::内存位置0x000000162E2FF3E0的异常。
断言失败((无符号)(i1 * DataType&lt; _Tp&gt; :: channels)&lt;(unsigned)(size.p 1 * channels()))in cv :: Mat :: at,file c:\ users \ joe \ desktop \ joe \ opencv \ opencv \ build \ include \ opencv2 \ core \ mat.inl.hpp,第1095行
感谢您的帮助!祝你有美好的一天 !
编辑:这是我在评论中提到的错误
答案 0 :(得分:0)
你传递的旗帜'1'等于IMREAD_COLOR,请看:https://github.com/opencv/opencv/blob/master/modules/imgcodecs/include/opencv2/imgcodecs.hpp
IMREAD_COLOR会丢弃Alpha通道,请看这个 https://docs.opencv.org/3.1.0/d4/da8/group__imgcodecs.html#ga61d9b0126a3e57d9277ac48327799c80
所以你应该这样做
image = imread("C:/Users/Joe/Desktop/prova/paesaggioLuminoso.jpg", IMREAD_UNCHANGED);