#ifndef __I_INKDOTDETECT_H__
#define __I_INKDOTDETECT_H__

// *****************************************************************************
// ��Ȩ���У�C��2023~2099 �Ϻ����ɳ������������޹�˾
// ��������Ȩ��
// *****************************************************************************
// ���� : ½�̷�
// �汾 : 1.0
// ���봴�����ڣ�2025/02/18
// �汾�������ڣ�2025/02/18
// ����˵��:ī����ӿ�
// *****************************************************************************

#include <vector>
#include <string>
#include "TypeDef.h"

namespace HalconCpp {
	class HTuple;
}

namespace JVision
{
	/**
	 * @brief ī����ӿڻ���
	 *
	 */
	class JVision_API IInkDotDetect
	{

	public:
		virtual ~IInkDotDetect() = 0 {}

		/**
		 * @brief ���
		 * @param[in] Image	     ��Ҫ����ͼƬ
		 * @param[in] markImage  ģ��ͼƬ
		 * @param[in&out] result ��λ�ļ��ϣ��Դ���ļ��Ͻ��в���
		 *
		 * @return bool          �Ƿ�ִ�гɹ�
		 */
		virtual bool FindInkDot(const JVision::ImageInfo& Image, const JVision::ImageInfo& markImage, std::vector<JVision::Point>& result) = 0;

		/**
		 * @brief ���
		 * @param[in] Image	     ��Ҫ����ͼƬ
		 * @param[in] markImage  ģ��ͼƬ
		 * @param[in&out] row    ��λ�������꼯�ϣ��Դ���ļ��Ͻ��в���
		 * @param[in&out] col    ��λ�������꼯�ϣ��Դ���ļ��Ͻ��в���
		 *
		 * @return bool          �Ƿ�ִ�гɹ�
		 */
		virtual bool FindInkDot(const JVision::ImageInfo& Image, const JVision::ImageInfo& markImage, HalconCpp::HTuple& row, HalconCpp::HTuple& col) = 0;

		/**
		 * @brief ���
		 * @param[in] Image	     ��Ҫ����ͼƬ
		 * @param[in] markImage  ģ��ͼƬ
		 * @param[in&out] row    ��λ�������꼯�ϣ��Դ���ļ��Ͻ��в���
		 * @param[in&out] row    ��λ�������꼯�ϣ��Դ���ļ��Ͻ��в���
		 * @param[in] index      ����ī����Ľӿ�
		 *
		 * @return bool          �Ƿ�ִ�гɹ�
		 */
		virtual bool FindInkDot(const JVision::ImageInfo& Image, const JVision::ImageInfo& markImage, HalconCpp::HTuple& row, HalconCpp::HTuple& col, int index) = 0;

		/**
		 * @brief ��ȡī���⺯����ʵ����ָ��
		 */
		static IInkDotDetect* GetDotDetect();
	};
}

#endif