で使用中に、cv::Mat
ピクセルをfloat4*
にマップしてCUDA計算を試みています。OpenCVセグメンテーションフォールト(コアダンプ)CvDA :: Mat ::を
cv::Mat frame = cv::imread("peds-007.png", cv::IMREAD_COLOR);
cudaAllocMapped((void**) cpu, (void**) gpu,
frame.cols * frame.rows * sizeof(float) * 4);
float4* cpuPtr = *cpu;
for (uint32_t y = 0; y < frame.rows; y++) {
for (uint32_t x = 0; x < frame.cols; x++) {
std::cout << x << ", " << y << std::endl;
const float4 px = make_float4(float(frame.at<cv::Vec3b>(x, y)[2]),
float(frame.at<cv::Vec3b>(x, y)[1]),
float(frame.at<cv::Vec3b>(x, y)[0]),
float(255));
//float(frame.at<cv::Vec4b>(x, y)[3]));
cpuPtr[y*imgWidth+x] = px;
}
}
上記のコードを実行すると、Segmentation fault (core dumped)
が返されます。
コードによってアクセスされる最後のピクセルは(1662,0)にあります。
私が直接、ループの外のピクセルにアクセスする場合:
frame.at<cv::Vec3b>(1662, 0);
またSegmentation fault (core dumped)
の原因となります。
なぜこの問題が発生し、この問題を解決するにはどうすればよいですか?
「fr」とは何ですか?この条件は無効です: 'x
@MarekRああ、はい。 typo ...ありがとう! –
画像の解像度は? – BHawk