我正在尝试使用开放式CV的无缝克隆,但我遇到了一个我无法弄清的非常烦人的段错误。看起来如果垫子中的最后一个像素的值不为255,则会发生段错误。下面是我的测试代码:
cv::Mat im2 = cv::imread("kitten.jpg");
cv::Mat hund;
cv::resize(im2, hund, Size(10,10));
cv::Mat obj2 = cv::Mat(cv::Size(10, 10), CV_8UC3, cv::Scalar(0));
cv::Mat mask2(obj2.size(), CV_8UC1, cv::Scalar(255));
cv::Point center2(int(hund.cols / 2), int(hund.rows / 2));
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 10; j++)
{
cv::Mat out;
std::cout << "(" << i << "," << j << ")" << std::endl;
mask2.at<uchar>(i, j) = 0;
cv::seamlessClone(obj2, hund, mask2, center2, out, cv::MIXED_CLONE);
}
}
这非常有效,直到在本示例输出中看到的最后一个像素为止:
(0,0)
(0,1)
...
(9,8)
(9,9)
Segmentation fault (core dumped)