// Create the output image with the same attributes of the original, i.e. dimensions & 3-channel, so we have a colored result at the end
cv::Mat output = cv::Mat::zeros(input.size(), input.type());
// copyTo() uses circular_shape as a mask and copies that exact portion of the input to the output
input.copyTo(output, circular_shape);
cv::namedWindow("Eggs", cv::WINDOW_NORMAL | cv::WINDOW_KEEPRATIO);
cv::imshow("Eggs", output);
cv::resizeWindow("Eggs", 800, 600);
cv::waitKey(0);
return 0;
}
看起来你需要图像的外部填充黑色,因为这样更容易识别鸡蛋,因为它们将被隔离为白色。在
但是如果寄生虫卵神奇地变成蓝色呢?我稍后将对此进行解释,但这种方法将使您从每次需要分析新样本时单击图像的负担中解脱出来。在
我用C++编写了答案,但是如果你遵循代码的代码,我相信你可以很快地把它翻译成Python。在此时,灰度是什么样子:
![](https://i.stack.imgur.com/iXTjU.png)
^{pr2}$此时,圆形是什么样子:
窗口上显示的输出为:
这个解决方案的优点是,用户不需要与应用程序交互以方便检测鸡蛋,因为它们已经被涂成蓝色。在
在此之后,可以对输出图像执行其他操作,例如从图像的其余部分^{} 到{a2}。在
因此,为了完成,我将添加几行文本/代码来演示从这一点开始,您可以做些什么来将鸡蛋与图像的其余部分完全隔离:
在此阶段,仅蓝色像素是什么样子:
在此阶段,仅蓝色像素是什么样子:
解决了我的问题,我创建了一个鼠标事件回调函数,用黑色填充我单击的任何内容。下面是我在回调中使用的代码:
相关问题 更多 >
编程相关推荐