gpt4 book ai didi

c++ - 提取三角形误差的图像像素

转载 作者:行者123 更新时间:2023-11-28 05:22:49 26 4
gpt4 key购买 nike

我是图像处理和开发的新手。我需要获取图像的内部三角形像素。为此,我使用了以下代码。不幸的是我得到了不需要的黑色像素。摆脱那个问题我试图通过给 alfa 值删除背景 [0] 像素。(透明背景)但它给出了以下错误。任何帮助表示赞赏。

我的代码:

Mat img = cv::imread("/home/fabio/code/lena.jpg", cv::IMREAD_GRAYSCALE);

Mat alpha(img.size(), CV_8UC1, Scalar(0));

//triangle definition (example points)
vector<Point> points;
points.push_back(Point(200, 70));
points.push_back(Point(60, 150));
points.push_back(Point(500, 500));

//apply triangle to mask
fillConvexPoly(alpha, points, Scalar(255));

cv::Mat finalImage = cv::Mat::zeros(img.size(), img.type());

img.copyTo(finalImage, alpha);

imshow("image", finalImage);

Mat dst;

Mat rgb[1];
split(finalImage, rgb);
Mat rgba[2] = { finalImage, alpha };
merge(rgba, 2, dst);

imshow("dst", dst);

错误:OpenCV 错误:cvConvertImage 中的 channel 数错误(源图像必须有 1、3 或 4 个 channel ),文件 C:\builds\2_4_PackSlave-win64-vc12-shared\opencv\modules\highgui\src\utils.cpp,第 611 行

What i need to do

最佳答案

用这个代替你的最后一个 block :

std::vector<cv::Mat> channels; 
cv::split(finalImage,m channels);
if(channels.size() == 0)
{
std::cout << "unexpected error" << std::endl;
return 1;
}
// fill up to reach 3 channels
while(channels,size() < 3)
{
channels.push_back(channels[0]);
}
// add alpha channel
channels.push_back(alpha);
cv::merge(channels, dst);

我没有测试,但这应该是你想要的?

关于c++ - 提取三角形误差的图像像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41097154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com