OpenCV VisualStudio,C 代码错误尝试访问像素

OpenCV + visualStudio , C++ code error trying to access pixels

本文关键字:访问 像素 错误 代码 VisualStudio OpenCV      更新时间:2023-10-16

我是乔,我是该网站的新成员。让我们走到这一点...我在Visual Studio上使用OpenCV库在C 中开始编程,但我对Image的像素有一个疑问。我编写了一个代码来计算Alpha通道的平均值(除B,G,R强度的值外,Pixel的Foruth组件)。在此处输入图像描述我陷入错误,我不知道该如何解决。这是我的代码

      #include "stdafx.h"
#include "opencv2highguihighgui.hpp"
#include "opencv2corecore.hpp"
#include "opencv2opencv.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强度的平均值(或绿色或红色),我的程序可以正确运行。

但是,使用此第四个通道,我有此错误消息:在第二次progetto opencv.exe中的0x00007FFC47603FB8的未经手法异常:Microsoft C 例外:CV ::异常位置0x00000000162E2FF3E.

断言失败(((unsigned)(i1 * datatype&lt; _tp> :: channels)&lt;(unsigned)(size.p1 * channels())(size.p1 * channels()))cv :: mat :: mat :: at :: AT,file C:joe desktop joe opencv opencv build include opencv2 core core mat.inl.hpp,行1095

感谢您的帮助!祝你有美好的一天 !

编辑:这是我在评论中提到的错误

带有正确代码的Visual Studio中的错误

其他错误

在此处输入图像描述

您正在以flag'1'为等。imgcodecs.hpp

和imread_color删除alpha频道,请参阅此信息https://docs.opencv.org/3.1.0/d4/da8/group__imgcodecs.html#ga61d9b0126a3e57d9277ac4832779999c80

所以你应该做

image = imread("C:/Users/Joe/Desktop/prova/paesaggioLuminoso.jpg", IMREAD_UNCHANGED);