1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| class BadImagePipeline : public CalculatorBase { public: absl::Status Process(CalculatorContext* cc) override { cv::Mat step1 = input.clone(); cv::cvtColor(step1, step1, cv::COLOR_BGR2GRAY); cv::Mat step2 = step1.clone(); cv::blur(step2, step2, cv::Size(3, 3)); cv::Mat step3 = step2.clone(); cv::threshold(step3, step3, 100, 255, cv::THRESH_BINARY); cv::Mat step4 = step3.clone(); cv::findContours(step4, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); cc->Outputs().Index(0).AddPacket( MakePacket<cv::Mat>(step4).At(cc->InputTimestamp())); return absl::OkStatus(); } };
class GoodImagePipeline : public CalculatorBase { public: absl::Status Process(CalculatorContext* cc) override { cv::Mat output = input.clone(); cv::cvtColor(output, output, cv::COLOR_BGR2GRAY); cv::blur(output, output, cv::Size(3, 3)); cv::threshold(output, output, 100, 255, cv::THRESH_BINARY); cv::findContours(output, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); cc->Outputs().Index(0).AddPacket( MakePacket<cv::Mat>(output).At(cc->InputTimestamp())); return absl::OkStatus(); } };
|