我是乔,我是这个网站的新成员。让我们谈谈......我开始使用visual studio上的openCV库用c ++编程,但我对图像的像素有疑问..我写了一个代码来计算alpha通道的平均值(像素的foruth分量,in除了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 <_Tp> :: channels)<(unsigned)(size.p1 * channels()))在cv :: Mat :: at,文件c:\ users \ joe \ desktop \ joe \ opencv \ opencv \ build \ include \ opencv2 \ core \ mat.inl.hpp,第1095行
谢谢您的帮助 !祝你有美好的一天 !
编辑:这是我在评论中提到的错误
你传递的旗帜'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);